/* По каждому фильму (film) вывести поля:

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

- кол-во актеров, снявшихся в фильме (кол-во строк в film_actor).

- сумму продаж по данному фильму (sum(payment.amount)).

Сделать расчет кол-ва актеров в каждом фильме в отдельном запросе cte.  Сделать расчет общей суммы продаж по каждому фильму в отдельном cte.

*/


with film_actor_cnt as (

select 

fa.film_id,

count(*) as cnt

from 

film_actor fa 

group by

fa.film_id

),

film_amount as (

select 

i.film_id,

sum(p.amount) as amount

from 

inventory i 

join rental r 

on i.inventory_id = r.inventory_id 

join payment p 

on p.rental_id = r.rental_id 

group by 

i.film_id

)

select 

f.title,

coalesce(fa.cnt, 0) as film_actor_cnt,

coalesce(fam.amount, 0) as amount

from 

film f 

left join film_actor_cnt fa

on f.film_id = fa.film_id

left join film_amount fam

on f.film_id = fam.film_id;


/* Вывести по каждому фильму (film):

- название (film.title).

- общую сумму продаж по фильму (sum(payment.amount)).

- общую сумму продаж по всем фильмам (sum(payment.amount)).

- долю продаж данного фильма от всех продаж в процентах, рассчитанную по формуле: [продажи по данному фильму] / [продажи по всем фильмам] * 100. 


Расчет всех продаж по всем фильмам сделать с помощью cte. */


with film_amount as (

select 

i.film_id,

sum(p.amount) as amount

from 

inventory i 

join rental r 

on i.inventory_id = r.inventory_id 

join payment p 

on p.rental_id = r.rental_id 

group by 

i.film_id

),

total_amount as (

select 

sum(fa.amount) as total_amount

from 

film_amount fa

)

select 

f.title,

coalesce(fa.amount, 0) as amount,

ta.total_amount,

coalesce(fa.amount, 0) / ta.total_amount * 100 as percent_amount

from 

film f 

left join film_amount fa

on fa.film_id = f.film_id

cross join total_amount ta

Последнее изменение: воскресенье, 18 июля 2021, 10:00