/* По каждому фильму (film), по которому были платежи, вывести общую сумму 

 * вырученных платежей (payment.amount) с проката. 

 * Вывести 2 колонки: 

 * 1. film_title - с названием фильма (film.title). 

 * Каждый фильм, должен быть указан в этой колонке один раз; 

 * 2. amount - общая сумма, на которую фильм сдавался в прокат (payment.amount). 

 * 

 * Отсортировать полученный результат в порядке убывания общей суммы сдачи в прокат. 

 * Связь таблиц происходит следующим образом: 

 * film <- inventory; inventory <- rental; rental <- payment.

 */


select 

f.title,

sum(p.amount) as amount

from 

film f 

join inventory i 

on i.film_id = f.film_id 

join rental r 

on r.inventory_id = i.inventory_id 

join payment p 

on p.rental_id = r.rental_id

group by

f.title

order by 

amount desc;



/* По каждому актеру (actor) вывести в скольких фильмах он снимался. 

 * Вывести 2 колонки в результате: 

 * 1. actor_name - имя (actor.first_name) и фамилия (actor.last_name) актера через пробел; 

 * 2. film_number - кол-во фильмов (film), в которых снимался актер. 

 * 

 * Отобразить только актеров, которые снялись более чем в 20 фильмах.

 */


select 

a.first_name || ' ' || a.last_name as actor_name,

count(*) as film_number

from 

actor a 

join film_actor fa 

on a.actor_id = fa.actor_id 

group by 

actor_name

having 

count(*) > 20;


/* Вывести одно число - сколько всего фильмов (film) 

 * продолжительностью (film.length) более 120 минут. 

 */


select 

count(*)

from 

film f 

where 

f.length > 120;



/* По каждой категории фильмов (category) вывести кол-во фильмов (film) 

 * продолжительностью (film.length) от 180 минут.

 * 

 * Вывести 2 поля:

 * - category_name - название категории (category.name),

 * - film_number - кол-во фильмов продолжительностью от 180 минут.

 * 

 * Если в категории нет фильмов продолжительностью от 180 минут - 

 * ее также нужно отобразить, но в film_number для нее нужно вывести 0. 

 * 

 * Отсортировать результат по убыванию кол-ва фильмв в категории. */


select 

c."name" as category_name,

count(f.film_id) as film_number

from 

category c 

left join film_category fc 

on c.category_id = fc.category_id 

left join film f

on f.film_id = fc.film_id 

and f.length >= 180

group by 

c."name"

order by 

film_number desc;


Последнее изменение: воскресенье, 27 июня 2021, 07:29