Ответ
Оконные функции (window functions) выполняют вычисления над набором строк, связанных с текущей строкой, без сворачивания в одну строку, как в агрегатных функциях. Они работают с "окном" данных, определяемым через OVER().
Основные компоненты:
PARTITION BY- разделяет данные на группы (аналог GROUP BY, но без сворачивания)ORDER BY- определяет порядок строк внутри окнаROWS/RANGE- задает границы окна (предыдущие/последующие строки)
Примеры:
-- Ранжирование
SELECT
name,
salary,
RANK() OVER(ORDER BY salary DESC) as rank
FROM employees;
-- Скользящее среднее
SELECT
date,
revenue,
AVG(revenue) OVER(ORDER BY date ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) as moving_avg
FROM sales;
Популярные оконные функции: ROW_NUMBER(), RANK(), DENSE_RANK(), LEAD(), LAG(), FIRST_VALUE(), LAST_VALUE(), агрегатные функции с OVER().