Віконні функції SQL
Коротко: Віконні функції обчислюють по групі пов’язаних рядків, не згортаючи рядки в один. Так кожен рядок отримує, наприклад, свій ранг чи наростаючий підсумок.
Докладніше: На відміну від GROUP BY, що дає один рядок на групу, віконні функції зберігають усі рядки. «Вікно» задається через OVER (...).
Подробиці
- Структура:
функція() OVER (PARTITION BY стовпець ORDER BY стовпець).PARTITION BYділить на групи,ORDER BYвпорядковує всередині. - Ранжування:
ROW_NUMBER()(наскрізний),RANK()(пропуски за рівності),DENSE_RANK()(без пропусків). - Сусіди:
LAG(стовпець)іLEAD(стовпець)беруть значення попереднього чи наступного рядка, наприклад для змін порівняно з минулим місяцем. - Наростаючі підсумки:
SUM(сума) OVER (ORDER BY дата). ЗROWS BETWEEN 2 PRECEDING AND CURRENT ROWвиходить ковзне середнє. - Типове завдання: Найновіший рядок по кожному клієнту:
ROW_NUMBER() OVER (PARTITION BY клієнт ORDER BY дата DESC)і далі фільтр= 1. - Примітка: Віконні функції не можна використовувати у
WHERE. Для цього застосовуйте підзапит чи CTE.
Див. також: SQL