/* Задача 1: Для каждой категории показать 2 строки: - Самый дорогой товар с email'ом - Самый дорогой товар без email'а */ with with_mail as ( select category, name, price, email_support 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 ) t where rn = 1 ), without_mail as ( select category, name, price, email_support 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 ) t where rn = 1 ) select * from with_mail union all select * from without_mail order by category; /* Задача 2: Для каждого товара показать: - `name` — название товара - `category` — категория товара - `price` — цена текущего товара - `next_price` — цена следующего товара внутри той же категории, упорядоченного по цене - `diff` — разница между ценой текущего товара и ценой следующего товара (`price - next_price`) */ with t 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 t order by category; /* Задача 3: Показать `category`, `name`, `price`, `cumulative_sales` Где `cumulative_sales` — это сумма `price` **внутри категории** по мере возрастания цены */ select category, name, price, sum(price) over (partition by category order by price) as cumulative_sales from products_extended; /* Задача 4: Вывести `category`, `name`, `price`, `avg_price`, `is_above_avg` Где `avg_price` — средняя цена по категории `is_above_avg = true`, если `price > avg_price` */ with t as( select category, name, price, round(avg(price) over (partition by category), 1) as avg_price from products_extended) select category, name, price, avg_price, price > avg_price as is_above_avg from t order by category;