Для чего используют оконные функции SQL

«Для чего используют оконные функции SQL» — вопрос из категории SQL, который задают на 27% собеседований Системный Аналитик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Оконные функции (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
  • Не сворачивают результат в одну строку как обычные агрегаты