Уроки модуля (2/4)
Группировка с помощью PARTITION BY
Группировка с помощью PARTITION BY
Иметь глобальные вычисления для каждой строки удобно, но часто этого недостаточно. Мы можем захотеть вычислить среднее значение на категорию или на одного клиента, сохраняя при этом исходные данные в каждой строке.
Именно здесь появляется PARTITION BY внутри предложения OVER(...).
Как работает PARTITION BY
Концептуально он ведет себя аналогично GROUP BY, но вместо свертывания строк в результате он лишь определяет границу «окна» данных, с которым функция будет работать для вычисления результата для одной строки.
SELECT
product_name,
category_id,
price,
AVG(price) OVER(PARTITION BY category_id) AS cat_avg_price
FROM products;Каждая строка продукта содержит свою собственную информацию, а в столбце cat_avg_price будет показано среднее значение ограничено продуктами в той же категории.
Из таблицы «продукты» извлеките «id», «category_id» и «price». Добавьте столбец «category_total», вычисляющий СУММУ «цены» для каждого «category_id», используя оконные функции.
Показать подсказку
Используйте СУММУ (цена) OVER (РАЗДЕЛ ПО категории_id).
Решение доступно после 3 попыток
В таблице «обзоры» покажите «product_id», «rating» и «avg_product_rating» (средний рейтинг, разделенный по продуктам). Показать все строки.
Показать подсказку
Используйте AVG(рейтинг) и РАЗДЕЛЕНИЕ ПО product_id. Приведите его к NUMERIC, если необходимо.
Решение доступно после 3 попыток