Data Analyst Professional · Модуль 5 · Урок 16 із 51
OVER, PARTITION BY і ORDER BY: як працює вікно
Віконна функція обчислює значення на наборі пов’язаних рядків, але не стискає результат як GROUP BY. Кожний рядок лишається на своєму grain, а OVER (...) визначає partition, порядок і frame.
GROUP BY і window function
| Питання | GROUP BY | Window |
|---|---|---|
| Кількість рядків | стискає до 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; business ties потребують tie-breaker.
Вибирає підмножину відносно поточного рядка для frame-sensitive functions.
Окремо визначає порядок відображення фінального 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 результату.
Закріпіть матеріал уроку
Три сценарні питання. Для зарахування уроку потрібно дати щонайменше дві правильні відповіді.