Ответ
Оконные функции (Window Functions) позволяют выполнять вычисления над набором строк, связанных с текущей строкой, без группировки результатов. Они работают с "окном" данных, определяемым через OVER().
Ключевые особенности:
- Не сворачивают строки как
GROUP BY - Имеют доступ к данным соседних строк
- Сохраняют исходное количество строк
Основные компоненты:
- PARTITION BY - разделяет данные на группы (аналог GROUP BY)
- ORDER BY - определяет порядок строк в окне
- Frame - задает границы окна (ROWS/RANGE)
Пример:
SELECT
name,
department,
salary,
AVG(salary) OVER(PARTITION BY department) as avg_dept_salary,
RANK() OVER(PARTITION BY department ORDER BY salary DESC) as rank_in_dept
FROM employees;
Популярные функции: ROW_NUMBER(), RANK(), DENSE_RANK(), LEAD(), LAG(), агрегатные функции.