EMZETT.
Увійти

Віконні функції 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