--Вывести все фильмы без ограничения по возрасту (film.rating = ‘G’). По каждому из фильмов вывести:

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

--- сколько всего дисков с этим фильмом (кол-во записей в inventory) (рассчитать отдельной функцией, которая принимает на вход film_id)

--- сколько раз фильм сдавали в аренду (кол-во записей в rental) (рассчитать отдельной функцией, которая принимает на вход film_id)


create function disk_nm(film_id integer) returns integer

as $$


select

count(*)

from

inventory i

where 

i.film_id = disk_nm.film_id;

$$ language sql;




create function rent_nm(film_id integer) returns integer

as $$


select

count(*)

from

inventory i

join rental r using(inventory_id)

where 

i.film_id = rent_nm.film_id;

$$ language sql;




select

f.title,

disk_nm(f.film_id) as disk_nm,

rent_nm(f.film_id) as rent_nm

from

film f

where 

f.rating = 'G';


--Написать функцию, которая принимает на вход два целых числа типа int и возвращает наибольшее из них. 

--Написать запрос с примером использования этой функции.


create function maximum(i1 integer, i2 integer) returns integer

as $$

select

case 

when i1 > i2

then i1

else i2

end;

$$ language sql;


select

maximum(1, 2),

maximum(3, 2),

maximum(3, 3)


--Написать функцию, которая добавляет в систему информацию о новом компакт диске (добавляет новую запись в таблицу inventory). 

--Принимает параметры: 

--- film_id - id фильма, который находится на новом компакт диске

--- store_id - id магазина, к которому будет привязан компакт диск

--Добавить 3 новых компакт диска в систему, используя новую функцию.


drop function create_inventory;


create function create_inventory(film_id integer, store_id integer) returns void

as $$

insert into inventory(

film_id,

store_id

)

values(

film_id,

store_id

);

$$ language sql;


select 

create_inventory(1, 1),

create_inventory(100, 2),

create_inventory(200, 1)

select 

*

from

inventory 

order by inventory_id desc;


--*Написать функцию, которая принимает на вход film_id и возвращает пары значений:

--- дату

--- общую сумму платежей по данному фильму за эту дату (sum(payment.amount))

--

--Выводим только даты, за которые был хотя бы один платеж по выбранному фильму.

--Отсортировать результат в порядке увеличения даты.



create function payment_film_amount(film_id integer) returns table(dt date, amount float)

as $$

select

p.payment_date::date as dt,

sum(p.amount) as amount

from

inventory i

join rental r using(inventory_id)

join payment p using(rental_id)

where 

i.film_id = payment_film_amount.film_id

group by 

p.payment_date::date

order by 

dt;

$$ language sql;


select 

*

from

payment_film_amount(3);


Last modified: Monday, 13 June 2022, 2:37 PM