Разбор домашнего задания 8.1
/* Вывести список всех фильмов (film). По каждому фильму отобразить поля:
* - название (film.title).
* - кол-во дней, на которые фильм дается в аренду (film.rental_duration).
* - общее кол-во фильмов, которые даются в аренду на такое же кол-во дней (с таким же значением film.rental_duration)
*/
select
f.title,
f.rental_duration,
count(*) over(partition by f.rental_duration) as rental_dur_cnt
from
film f;
/* Вывести список всех фильмов (film). По каждому фильму отобразить поля:
* - название (film.title).
* - кол-во дней, на которые фильм дается в аренду (film.rental_duration).
* - продолжительность фильма (film.length).
* - порядковый номер фильма в порядке уменьшения продолжительности (film.length). Нумеруем в рамках групп фильмов с одинаковым значением film.rental_duration.
* У каждого фильма должен быть свой уникальный номер. Фильмы с одинаковой продолжительностью сортируем по названию (film.title) в алфавитном порядке.
*/
select
f.title,
f.rental_duration,
f.length,
row_number() over(partition by f.rental_duration order by f.length desc, f.title) as rn
from
film f
/* На основе таблицы платежей (payment) посчитать накопительным итогом общую сумму платежей (sum(payment.amount)) на каждую дату, на которую были платежи.
* Вывести поля:
* - дата (payment.payment_date::date). Одну дату выводим в одной строке.
* - общая сумма всех платажей (sum(payment.amount)) за все даты до текущей, а также за текущую дату.
*/
with payment_date as (
select
p.payment_date::date as pay_date,
sum(p.amount) as amount
from
payment p
group by
p.payment_date::date
)
select
p.pay_date,
sum(p.amount) over(order by p.pay_date) as cumulative_amount
from
payment_date p;
select
p.payment_date::date as pay_date,
sum(sum(p.amount)) over(order by p.payment_date::date) as amount
from
payment p
group by
p.payment_date::dateРешение задания на повторение
SELECT
postal_code,
address
FROM
address a
WHERE postal_code LIKE '6%'
UNION
SELECT
postal_code,
address
FROM
address a
JOIN city c USING (city_id)
WHERE city ='London'