WindowFuncs Homework done

This commit is contained in:
Alex
2026-02-05 13:44:24 +03:00
parent 63f391d689
commit b7c7dcf012
@@ -22,21 +22,51 @@ values (1, 'iPhone 14', 'smartphone', 799, true, 'iphone@apple.com'),
alter table products_extended
alter column price type DECIMAL(10, 2)
select * from products_extended
------------------ Задание №1 (По нему ты говорил, что нечитаемо, объясни как переделать pls <3)
with email_false as (select * from
(
select category, name, price, email_support, row_number() over (partition by category order by price desc) as rn
from products_extended where email_support is null) where rn = 1
select category, name, price, email_support,
row_number() over (partition by category order by price desc) as rn
from products_extended
where email_support is null)
where rn = 1
),
email_true as (select * from
(
select category, name, price, email_support, row_number() over (partition by category order by price desc) as rn
from products_extended where email_support is not null) where rn = 1
select category, name, price, email_support,
row_number() over (partition by category order by price desc) as rn
from products_extended
where email_support is not null)
where rn = 1
)
select category, name, price, email_support from email_false
union all
select category, name, price, email_support from email_true
order by category, price desc
---------------------- Задание №2 (Переделал с двух оконок в одном запросе на СТЕ с одной оконкой внутри)
with get_data as (
select name, category, price,
LEAD(price) OVER (PARTITION BY category order by price) AS next_price
from products_extended
)
select name, category, price, next_price,
price - next_price AS diff
from get_data
--------------------- Задание №3
select category, name, price,
SUM(price) over (partition by category order by price) as cumulative_sales
from products_extended
---------------------- Задание №4
with get_data as (
select category, name, price, AVG(price) over (partition by category) as avg_price
from products_extended
)
select category, name, price, avg_price,
case when price > avg_price then 'true' else 'false' end as is_above_avg
from get_data