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