Задачи на агрегатные функции SQL
Агрегаты·junior

Самый длинный и самый короткий фильм

Задача

Контент-менеджер собирает справку по каталогу для презентации: «Дай крайние точки по длительности — самый длинный и самый короткий фильм в минутах, одним запросом».

Верни два числа: минимальную и максимальную длительность фильма.

Схема данных

Учебная база проката dvdrental, одна таблица:

  • film(film_id, title, length, ...) — каталог; length — длительность фильма в минутах (integer).

Решение

SELECT min(length) AS shortest,
       max(length) AS longest
FROM film;

Разбор

MIN и MAX — самые бесхитростные агрегаты: они возвращают наименьшее и наибольшее значение столбца по всем строкам. Никакой сортировки писать не нужно — движок сам пробегает по колонке и запоминает крайние точки.

Главное, что тут стоит увидеть: в одной строке результата спокойно уживаются два агрегата сразу. Раз группировки нет — вся таблица считается за одну большую группу, — то SELECT возвращает ровно одну строку с двумя числами. Это удобно: не нужно два отдельных запроса, чтобы узнать минимум и максимум.

Частый вопрос джуну: а как заодно вытащить название самого длинного фильма? Вот тут MAX(length) уже не поможет — агрегат возвращает только само число, но «не помнит», из какой строки оно пришло. Дописать в SELECT рядом title без группировки не выйдет: PostgreSQL потребует, чтобы title был либо под агрегатом, либо в GROUP BY. Название самого длинного фильма достаётся иначе — через ORDER BY length DESC LIMIT 1 или через оконные функции. Это важная граница: агрегат отвечает на «какое значение», а не «в какой строке».

MIN/MAX, как и другие агрегаты, пропускают NULL — если бы у части фильмов длительность была пустой, эти строки просто не участвовали бы в сравнении. В нашем каталоге length заполнен, так что рекорды честные.

Если крайние точки нужны не по всему каталогу, а отдельно по каждому рейтингу, добавляется GROUP BY — смотри задачу «разброс длительности по рейтингу».

Ожидаемый результат

shortest | longest
--- | ---
46 | 185

Прорешай такие задачи сам

Читать разбор полезно, а настоящая прокачка — самому писать запросы и получать обратную связь. В симуляторе живая база и проверка запросов, лёгкий режим — бесплатно.

Прорешать в бесплатной песочнице

Смежные задачи

Вопросы по теме