Дорогой прокат: фильмы по высокому тарифу
Задача
Финансы прокатной сети хотят понять, что происходит в верхнем ценовом сегменте. Ставка аренды (rental_rate) у фильмов бывает разной, и коллега просит: «Дай все фильмы, которые сдаём по самому дорогому тарифу — дороже 2.99».
Верни film_id, title и rental_rate всех фильмов, у которых ставка аренды строго больше 2.99.
Схема данных
Учебная база проката dvdrental, одна таблица:
film(film_id, title, rental_rate, ...)— каталог;rental_rate— стоимость аренды, число с двумя знаками после запятой. В базе всего три уровня ставки: 0.99, 2.99 и 4.99.
Решение
SELECT film_id, title, rental_rate
FROM film
WHERE rental_rate > 2.99
ORDER BY title;
Разбор
Условие простое, но в нём прячутся два вопроса, которые любят на собеседовании.
Первый — про строгость неравенства. rental_rate > 2.99 берёт только фильмы дороже 2.99, то есть с единственной оставшейся ставкой 4.99. Фильмы ровно по 2.99 в ответ не попадут. Если бы коллега сказал «по 2.99 и выше», знак сменился бы на >=, и в выборку добавились бы все «средние» фильмы. Разница в один символ — а число строк меняется в разы, потому что на ставке 2.99 висит большой пласт каталога.
Второй вопрос — про диапазоны. Часто ту же мысль удобнее выразить через BETWEEN: например, «средний сегмент» — это rental_rate BETWEEN 1 AND 3. Важно помнить, что BETWEEN включает обе границы: BETWEEN 1 AND 3 — это >= 1 AND <= 3. Для нашей задачи BETWEEN не нужен (у нас открытая граница сверху), но знать про включающие концы диапазона обязательно — на этом ловят чаще всего.
Мелочь про сравнение дробей: rental_rate хранится как numeric, а не как плавающая точка, поэтому сравнение с 2.99 точное — никаких «а вдруг 2.9900001». С типом real/double precision такие сравнения были бы уже с оглядкой.
Если хочется усложнить и добавить второе условие — например, отобрать заодно только семейные фильмы, — смотри задачу «короткие семейные фильмы», там BETWEEN и IN работают в связке через AND.
Ожидаемый результат
film_id | title | rental_rate
--- | --- | ---
2 | Ace Goldfinger | 4.99
7 | Airplane Sierra | 4.99
8 | Airport Pollock | 4.99
10 | Aladdin Calendar | 4.99
13 | Ali Forever | 4.99
20 | Amelie Hellfighters | 4.99
21 | American Circus | 4.99
28 | Anthem Luke | 4.99
31 | Apache Divine | 4.99
32 | Apocalypse Flamingos | 4.99
… всего строк: 336 (показаны первые 10)
Прорешай такие задачи сам
Читать разбор полезно, а настоящая прокачка — самому писать запросы и получать обратную связь. В симуляторе живая база и проверка запросов, лёгкий режим — бесплатно.
Прорешать в бесплатной песочнице