Разбор домашнего задания 5.1
/* Вывести список всех фильмов (film).
* По каждому фильму отобразить 3 поля:
* - название фильма (film.title)
* - рейтинг фильма (film.rating)
* - расшифровку рейтинга фильма. Ниже указаны пары: рейтинг - расшифрока рейтинга:
* G - Нет возрастных ограничений
* PG - Рекомендуется присутствие родителей
* PG-13 - Детям до 13 лет просмотр не желателен
* R - Лицам до 17 лет обязательно присутствие взрослого
* NC-17 - Лицам до 18 лет просмотр запрещен */
select
f.title,
f.rating,
case
when f.rating = 'G' then 'Нет возрастных ограничений'
when f.rating = 'PG' then 'Рекомендуется присутствие родителей'
when f.rating = 'PG-13' then 'Детям до 13 лет просмотр не желателен'
when f.rating = 'R' then 'Лицам до 17 лет обязательно присутствие взрослого'
when f.rating = 'NC-17' then 'Лицам до 18 лет просмотр запрещен'
else 'Неизвестный рейтинг'
end as rating_full
from
film f;
select
f.title,
f.rating,
case
f.rating
when 'G' then 'Нет возрастных ограничений'
when 'PG' then 'Рекомендуется присутствие родителей'
when 'PG-13' then 'Детям до 13 лет просмотр не желателен'
when 'R' then 'Лицам до 17 лет обязательно присутствие взрослого'
when 'NC-17' then 'Лицам до 18 лет просмотр запрещен'
else 'Неизвестный рейтинг'
end as rating_full
from
film f;
/* Вывести 3 колонки:
* - название фильма (film.title)
* - рейтинг фильма (film.rating)
* - продолжительность фильма
*
* Отобразить только фильмы продолжительностью более 120 (film.length > 120).
* Для фильмов с рейтингом G при проверке брать удвоенную продолжительность (film.length * 2 > 120).
* При написании условия отбора фильмов использовать case. */
select
f.title,
f.rating,
f.length
from
film f
where
case when f.rating = 'G' then f.length * 2 else f.length end > 120;
select
f.title,
f.rating,
f.length
from
film f
where
f.length > case when f.rating = 'G' then 60 else 120 end;
/* Вывести список всех фильмов (film). По каждому фильму нужно отобразить 2 колонки:
* - название фильма (film.title)
* - название категории фильма (category.name). Если фильм относится к категории с category_id = 5,
* то вместо категории с идентификатором 5 нужно отобразить категорию с category_id = 1.
*
* Связь между таблицей фильмов (film) и таблицей категорий (category) осуществляется посредствам промежуточной таблицы
* film_category. */
select
f.title,
c."name" as category_name
from
film f
join film_category fc
on fc.film_id = f.film_id
join category c
on case when fc.category_id = 5 then 1 else fc.category_id end = c.category_id