Задачи на SELECT и WHERE
Выборка и фильтры·middle

Дорогой прокат: фильмы по высокому тарифу

Задача

Финансы прокатной сети хотят понять, что происходит в верхнем ценовом сегменте. Ставка аренды (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)

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

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

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

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

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