Сколько фильмов длиннее двух часов
Задача
Каталог видеопроката хочет понять, сколько у него «длинных» фильмов — тех, что займут больше двух часов вечера. Посчитай количество фильмов длительностью строго больше 120 минут.
Схема данных
Учебная база проката dvdrental, таблица film(film_id, title, length, ...). Поле length — длительность фильма в минутах, обычный integer.
Решение
SELECT count(*) AS films
FROM film
WHERE length > 120;
Разбор
Это одна из первых задач, где джун путает WHERE и HAVING. Здесь фильтр применяется к отдельным строкам таблицы film до какой-либо агрегации — значит, это ровно случай WHERE. HAVING понадобился бы, если бы мы сначала группировали фильмы (например, по рейтингу) и хотели отфильтровать уже посчитанные группы.
length > 120 — строгое неравенство: фильм ровно на 120 минут в ответ не попадёт. Это частая придирка на собеседовании: «а если бы просили не короче двух часов?» — тогда было бы >=. Разница на первый взгляд незаметна, но на реальных данных может увести ответ на десяток строк.
COUNT(*) считает все строки, прошедшие фильтр, независимо от NULL в каких-либо столбцах — в отличие от COUNT(length), которая проигнорировала бы строки с NULL в этом поле. Здесь разницы нет, потому что length участвует в WHERE и NULL-строки уже отсеяны, но привычка выбирать COUNT(*) для «просто посчитать строки» — хорошая.
Если вместо количества нужен был бы список самих фильмов с группировкой по выручке — смотри задачу «топ-5 клиентов по выручке», там уже агрегат поверх JOIN и GROUP BY.
Ожидаемый результат
films
---
457
Прорешай такие задачи сам
Читать разбор полезно, а настоящая прокачка — самому писать запросы и получать обратную связь. В симуляторе живая база и проверка запросов, лёгкий режим — бесплатно.
Прорешать в бесплатной песочнице