Ответ
Оконные функции (Window Functions) в SQL позволяют выполнять вычисления над набором строк, связанных с текущей строкой, без группировки результата. Они сохраняют исходные строки, добавляя к ним вычисленные значения.
Основные применения:
- Ранжирование данных (
ROW_NUMBER(),RANK(),DENSE_RANK()) - Агрегация с сохранением детализации (
SUM() OVER(),AVG() OVER()) - Доступ к соседним строкам (
LAG(),LEAD()) - Скользящие средние/суммы
Пример:
SELECT
employee_id,
department_id,
salary,
RANK() OVER(PARTITION BY department_id ORDER BY salary DESC) as dept_rank,
AVG(salary) OVER(PARTITION BY department_id) as avg_dept_salary
FROM employees;
Ключевые особенности:
- Используют
OVER()для определения окна - Поддерживают
PARTITION BY(аналог GROUP BY) иORDER BY - Не сворачивают результат в одну строку как обычные агрегаты