|
|
|
| Доброго времени суток! Есть задача, которую пока решить не удается((( итак..... есть таблица..
ID Name Depart Score
1 Вася Пупкин 2 78
2. Ваня Ивнов 3 90
3. Петя Сидоров 7 21
4. Катя Банина 2 200
5. Алексей Трофимов 2 40
6. Олег Поляков 7 2
7. Евгений Слободин 3 29
Итак... Предположим, что DEPART - это ключ на...скажем отдел, гед работают эти люди....... Надо сделать выборку по одному человеку из каждого отдела с минимальным SCORE..... итак... нужно чтобы результирующая таблица выглядела бы так:
ID Name Depart Score
5 Алексей Трофимов 2 40
7. Евгений Слободин 3 29
6. Олег Поляков 7 2
Если сделать SELECT id, name, depart, min(score) from table group by depart........... то вывод будет таким......
ID Name Depart Score
5 Вася Пупкин 2 40
7. Ваня Ивнов 3 29
6. Петя Сидоров 7 2
т.е. в группу попадает первая строка, и к ней прклеивается min(Score) из другой строки...... собственно вопрос... Как сделать так, чтобы на вывод шла ИМЕННО ТА СТРОКА где min(score) в данной группе?.. т.е. что-то типа сортировки внутри группы......... | |
|
|
|
|
|
|
|
для: jonik
(17.06.2011 в 11:27)
| | попробуйте таким запросом:
SELECT * FROM table GROUP BY Depart ORDER BY Score ASC
|
| |
|
|
|
|
|
|
|
для: Lotanaen
(17.06.2011 в 11:33)
| | Спасибо, но не пойдет))) он сделает сортировку среди уже отобранных людей(((((( | |
|
|
|
|
|
|
|
для: jonik
(17.06.2011 в 11:46)
| | да действительно... | |
|
|
|
|
|
|
|
для: jonik
(17.06.2011 в 11:27)
| | Тут вероятно придется прибегнуть к многотабличному запросу, создайте выборку по минимальным Score, соответствующих разным отделам и соединение её при помощи LEFT JOIN с исходной таблицей по Score. | |
|
|
|
|
|
|
|
для: cheops
(17.06.2011 в 11:39)
| | Спасибо, это я и хотел узнать... Я просто надеялся, что есть способ решения вопроса с помощью штатной функции....... Ну раз его нет, то тогда да.... придеться что-то придумывать эдакое))).... | |
|
|
|
|
|
|
|
для: jonik
(17.06.2011 в 11:44)
| | Нет, штатных средств нет, GROUP BY всегда выбирает случайное значение. | |
|
|
|