Перейти до основного вмісту
Модуль 13 · Урок 2 із 450/57 у курсі~15 min
Модульні уроки (2/4)

Групування за допомогою PARTITION BY

Групування за допомогою PARTITION BY

Мати глобальні обчислення для кожного рядка зручно, але часто цього недостатньо. Можливо, ми захочемо обчислити середнє значення на категорію або на клієнта, зберігаючи оригінальні деталі в кожному рядку.

Тут з’являється PARTITION BY в реченні OVER(...).

Як працює PARTITION BY

Концептуально він поводиться подібно до GROUP BY, але замість згортання рядків у результаті він лише визначає межу «вікна» даних, на якому функція працюватиме для обчислення результату для одного рядка.

SQL
SELECT
  product_name,
  category_id,
  price,
  AVG(price) OVER(PARTITION BY category_id) AS cat_avg_price
FROM products;

Кожен рядок продукту містить власні відомості, а стовпець cat_avg_price показуватиме середнє значення, обмежене продуктами в тій же категорії.

вправи#sql.m13.l2.e1
Спроби: 0Завантаження…

З таблиці «products» витягніть «id», «category_id» і «price». Додайте стовпець 'category_total', який обчислює СУМУ 'price' для кожного 'category_id' за допомогою віконних функцій.

Завантаження редактора…
Показати підказку

Використовуйте SUM(price) OVER(PARTITION BY category_id).

Рішення доступне після 3 спроб

вправи#sql.m13.l2.e2
Спроби: 0Завантаження…

У таблиці «reviews» відобразіть «product_id», «rating» і «avg_product_rating» (середній рейтинг, розподілений за продуктами). Показати всі рядки.

Завантаження редактора…
Показати підказку

Використовуйте AVG(рейтинг) і PARTITION BY product_id. Передайте його на NUMERIC, якщо потрібно.

Рішення доступне після 3 спроб