Data Analyst Professional · Модуль 5 · Урок 16 із 51

OVER, PARTITION BY і ORDER BY: як працює вікно

Віконна функція обчислює значення на наборі пов’язаних рядків, але не стискає результат як GROUP BY. Кожний рядок лишається на своєму grain, а OVER (...) визначає partition, порядок і frame.

90 хвPostgreSQLМінітест: 3 питання

GROUP BY і window function

ПитанняGROUP BYWindow
Кількість рядківстискає до grain групизберігає input rows
Деталі рядкапоза grouping недоступнілишаються поруч із метрикою
Прикладrevenue per customerкожне order + revenue customer
SELECT order_id, customer_id, net_amount, SUM(net_amount) OVER (PARTITION BY customer_id) AS customer_revenue FROM seowork_lab.orders WHERE status = 'completed';

Три частини window specification

PARTITION BY

Незалежно перезапускає обчислення для кожної групи.

ORDER BY

Визначає послідовність усередині partition; business ties потребують tie-breaker.

Frame

Вибирає підмножину відносно поточного рядка для frame-sensitive functions.

Outer ORDER BY

Окремо визначає порядок відображення фінального result set.

Frame треба писати явно

SUM(net_amount) OVER ( PARTITION BY customer_id ORDER BY ordered_at, order_id ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) AS customer_running_revenue

За наявності ORDER BY default frame може включати peer rows із однаковим sort value. Явний ROWS frame і стабільний tie-breaker роблять поведінку перевірною.

Практика і QA

  • Зафіксуйте input grain та очікувану кількість rows.
  • Порахуйте total через окремий control query.
  • Додайте partition total до кожного order і звірте його з control.
  • Порівняйте frame з ORDER BY та без нього.
  • Додайте унікальний tie-breaker і доведіть детермінованість.

Офіційна довідка

Готовність до тесту

Ви відрізняєте partition від grouping, пояснюєте window order, frame і outer order та зберігаєте grain результату.

Практична перевірка · урок 16 з 51

Закріпіть матеріал уроку

Три сценарні питання. Для зарахування уроку потрібно дати щонайменше дві правильні відповіді.

1. Що робить window function на відміну від GROUP BY?
2. Що визначає PARTITION BY?
3. Чи гарантує ORDER BY усередині OVER порядок фінального result?