Самый длинный и самый короткий фильм
Задача
Контент-менеджер собирает справку по каталогу для презентации: «Дай крайние точки по длительности — самый длинный и самый короткий фильм в минутах, одним запросом».
Верни два числа: минимальную и максимальную длительность фильма.
Схема данных
Учебная база проката 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
Прорешай такие задачи сам
Читать разбор полезно, а настоящая прокачка — самому писать запросы и получать обратную связь. В симуляторе живая база и проверка запросов, лёгкий режим — бесплатно.
Прорешать в бесплатной песочнице