OVER (оконные функции)
Ключевое слово, превращающее агрегатную функцию в оконную — вычисляет значение без схлопывания строк.
function() OVER ([PARTITION BY col] [ORDER BY col] [frame])Объяснение
Пример
-- Нарастающая сумма продаж по дате
SELECT
date,
sales,
SUM(sales) OVER (ORDER BY date) AS running_total
FROM daily_sales;Связанные термины
Анекдоты по теме
— Что такое FRAME в оконных функциях? — Часть окна, над которой считается функция для текущей строки. — Например? — ROWS BETWEEN 2 PRECEDING AND CURRENT ROW — скользящее среднее за 3 строки. — А UNBOUNDED PRECEDING? — От начала окна до текущей строки. Нарастающий итог.
Собеседование: — Напишите запрос для нахождения второй по величине зарплаты. Кандидат пишет подзапрос. — А можно без подзапроса? Пишет DENSE_RANK(). — А одной строкой? Пишет ORDER BY salary DESC LIMIT 1 OFFSET 1. Интервьюер: — Молодец. Это был вопрос на знание разных подходов, а не на правильный ответ.
— Зачем нужен PARTITION BY? — Это GROUP BY для оконных функций. Но без схлопывания. — Пример? — SUM(salary) OVER (PARTITION BY department) — сумма зарплат по отделу для каждой строки.