Упражнение 77
Мне казалось, что формулировка предельно понятна. Тем более, что когда эта задача еще находилась на втором рейтинговом этапе, она не вызывала никаких вопросов. Однако сказалась разница в классе :) . Отвечать на аналогичные вопросы приходилось столь часто, что мне пришлось написать это объяснение.
Вот типичный пример неправильного запроса:
SELECT MAX(superden.qty), superden.date
FROM (SELECT COUNT(den.trip_no) AS qty, den.date
FROM (SELECT DISTINCT trip_no, date
FROM Pass_in_trip
) as den, Trip
WHERE trip.trip_no=den.trip_no
AND trip.town_from='Rostov'
GROUP BY den.date
) AS superden
GROUP BY superden.date;
[[ column ]] |
---|
[[ value ]] |
Подзапрос
SELECT DISTINCT trip_no, date FROM Pass_in_trip;
[[ column ]] |
---|
[[ value ]] |
Группировка по дате позволяет подсчитать распределение количества ростовских рейсов по дням. Пока все верно, но последний шаг лишён смысла. Зачем еще одна группировка по дате, если все уже сгруппировано, т.е. для каждой даты в результирующем наборе и так есть только одна строка?
Кажется, что таким образом автор решения пытался найти максимум, но получил тот же самый набор. Пусть распределение количества по датам будет таким:
2007-08-19 | 2 |
2007-08-20 | 2 |
2007-08-21 | 3 |
По условию задачи мы должны получить лишь одну строку:
2007-08-21 | 3 |
т.к. максимальное число полётов – 3 – достигается 2007-08-21, но в результате последней группировки по дате мы получим те же самые 3 строки. |
Надеюсь, что теперь понятно, как следует решать эту задачу, и поддержке сайта не придется больше отвечать на письма по этому поводу :) .