Оконные функцииСредний
OVER (оконные функции)
Ключевое слово, превращающее агрегатную функцию в оконную — вычисляет значение без схлопывания строк.
Синтаксис
function() OVER ([PARTITION BY col] [ORDER BY col] [frame])
Объяснение
Оконные функции вычисляют значение для каждой строки с учётом «окна» соседних строк. В отличие от GROUP BY, строки не группируются.
Синтаксис: функция OVER (PARTITION BY ... ORDER BY ... ROWS/RANGE BETWEEN ...)
Выполняются после WHERE, GROUP BY, HAVING — поэтому нельзя фильтровать по их результату в WHERE. Нужен подзапрос или CTE.
Пример
-- Нарастающая сумма продаж по дате SELECT date, sales, SUM(sales) OVER (ORDER BY date) AS running_total FROM daily_sales;
Связанные термины
Анекдоты по теме
— Что такое оконная функция? — Это агрегат, который не схлопывает строки. — Как? — Представь, что GROUP BY считает итог для группы. Оконная функция считает итог, но оставляет каждую строку.
— Зачем нужен PARTITION BY? — Это GROUP BY для оконных функций. Но без схлопывания. — Пример? — SUM(salary) OVER (PARTITION BY department) — сумма зарплат по отделу для каждой строки.
— Почему оконная функция ROW_NUMBER() не играет в лотерею? — Потому что она нумерует всех по порядку, а выигрышный номер — тот, у кого ROW_NUMBER = 1 в каждой партиции. Но организаторы про это не знают.