|
|
|
| В большой таблице лежат оценки (double), данные разными тестерами (int)
Мне надо получить маленькую таблицу, в которой сведены равные количества лучших оценок каждого из тестеров.
Это только на РНР писать или MySQL тоже так может?
Таблица вполне очевидного формата:
id INT - просто первичный ключ
mark double - оценка
testerNumber INT - номер тестера
Соответственно, тестер с номером 1 может присутствовать в таблице в 100 раз большем количестве, чем тестер с номером 2.
В результирующей таблице должно быть строго определённое количество строк, и насколько только возможно, выровненное количество тестеров. (Если невозможно достигнуть равенства, -оценок кого-то из тестеров не хватает, тогда дополняем оченками остальных в равной мере (сохраняя равенство хотя бы между ними). | |
|
|
|
|
|
|
|
для: Eugene77
(13.04.2012 в 19:03)
| | Это вполне можно решить и средствами MySQL. Главное добиться нужного вам вывода при помощи SELECT-запроса, а потом воспользоваться запросом INSERT ... SELECT для вставки полученной промежуточной таблицы в постоянную таблицу базы данных. | |
|
|
|
|
|
|
|
для: cheops
(14.04.2012 в 17:00)
| | Главное добиться нужного вам вывода при помощи SELECT-запроса,
Это понятно, но именно здесь я и застрял.
Не могу сообразить, как сделать выравнивание тестеров по количеству | |
|
|
|
|
|
|
|
для: Eugene77
(15.04.2012 в 06:19)
| | А вы используйте COUNT(*) совместно с группировкой (GROUP BY) по уникальному идентификатору тестеров - у вас получится искомая таблица. | |
|
|
|
|
|
|
|
для: cheops
(15.04.2012 в 10:52)
| | >А вы используйте COUNT(*) совместно с группировкой (GROUP BY) по уникальному идентификатору тестеров - у вас получится искомая таблица.
Я думал, если использовать группировку по уникальному идентификатору тестеров, то я получу по по одной строке на каждый тестер, а мне надо по 100 (или около того, должно настраиваться).
Я что-то упустил? | |
|
|
|
|
|
|
|
для: Eugene77
(15.04.2012 в 12:39)
| | Если не сложно приведите краткий пример того, что есть и того, что нужно получить. | |
|
|
|
|
|
|
|
для: cheops
(15.04.2012 в 12:48)
| |
num, mark, tester;
1, 5.3, 1;
2, 2.4, 1;
3, 5.4, 1;
4, 5.8, 1;
5, 0.4, 2;
6, 5.4, 3;
7, 5.7, 2;
8, 5.4, 3;
9, 5.4, 1;
10, 5.4, 1;
11, 5.4, 1;
12, 5.4, 1;
13, 5.4, 1;
14, 5.4, 1;
15, 5.0, 1;
17, 5.4, 1;
18, 6.4, 1;
19, 5.4, 1;
18, 6.4, 1;
19, 5.4, 1;
20, 7.4, 1;
21, 8.4, 1;
22, 9.4, 1;
|
Из такой таблицы требуется получить таблицу в 9 строк (например) (на самом деле сотни строк), но количество строк меняется и завистит от совершенно других условий. В данном случае, пусть оно равно 9.
Тогда в итоговую выборку войдут все строки с номером тестера 2 и 3 так как их меньше, чем по 3,
остальное дополнится 1-м тестером (после сортировки по оценкам)
5, 0.4, 2;
6, 5.4, 3;
7, 5.7, 2;
8, 5.4, 3;
20, 7.4, 1;
21, 8.4, 1;
22, 9.4, 1;
4, 5.8, 1;
18, 6.4, 1;
|
| |
|
|
|
|
|
|
|
для: Eugene77
(15.04.2012 в 13:09)
| | Хм... а это число 9 сверху спускается? Что-то не очень пока понятна логика отбора строк, они случайные в рамках одного тестера или есть какая-то закономерность? | |
|
|
|
|
|
|
|
для: cheops
(15.04.2012 в 13:14)
| | >Хм... а это число 9 сверху спускается? Да. Всегда разное.
Что-то не очень пока понятна логика отбора строк, они случайные в рамках одного тестера или есть какая-то закономерность?
Да, в рамках одного тестера оценки не подчиняются никакой известной мне закономерности.
Логика ... своеобразная... можно её в некотором приближении описать в связи с известной притчей о том как три слепые мудреца ощупывали одного слона и говоили, что слон - это колонна, - это труба, - это верёвка, в зависимости от того, какую часть ощупали.
Теперь тестеры тоже оценивают одно и то же, но с разных сторон.
Для формирования наиболее достоверного вывода надо взять не максимальное количество оценок, а максимально удалиться от субъективного фактора посредством учёта большего количества мнений.
Но есть ещё и другое ограничение... общее количество оценок может быть ограничено сверху.
И соответственно, вывод состоит не в получении среднего арифметического от всех оценок, а делается по алгоритму не имеющему отношения к MySQL, но набор оценок надо предварительно отфильтровать, - вот я и спросил,: возможно ли это сделать на MySQL? | |
|
|
|
|
|
|
|
для: Eugene77
(15.04.2012 в 14:01)
| | 1) В один запрос это пожалуй никак не упихнуть... по уму бы нужно сначала весовые коэффициенты ответов вычислить... или максимально допустимое количество ответов на одного тестера.
2) Боюсь вам в клиентском языке будет удобнее все это провернуть, нежели в SQL. | |
|
|
|
|
|
|
|
для: cheops
(16.04.2012 в 10:27)
| | Понятно, на РНР напишу | |
|
|
|
|