Оконные функции
Оконные функции (Window Functions) в SQL — это специальные функции, которые выполняют вычисления по строкам внутри "окна", определённого над набором строк, не сворачивая результат в одну строку, в отличие от агрегатных функций.
Основная идея
Каждая строка остаётся в результирующем наборе.
Окно задаётся с помощью
OVER(), которое может включать:PARTITION BY — делит строки на группы (аналог
GROUP BY, но без сжатия строк).ORDER BY — задаёт порядок строк внутри окна.
Примеры оконных функций
ROW_NUMBER() — присваивает каждой строке уникальный номер в пределах окна.
SELECT
employee_id,
department_id,
ROW_NUMBER() OVER(PARTITION BY department_id ORDER BY salary DESC) AS row_num
FROM employees;Каждому сотруднику в отделе присваивается порядковый номер по зарплате.
RANK() — присваивает ранг с учётом одинаковых значений.
SELECT
employee_id,
salary,
RANK() OVER(ORDER BY salary DESC) AS salary_rank
FROM employees;SUM(), AVG() как оконные функции
SELECT
department_id,
employee_id,
salary,
SUM(salary) OVER(PARTITION BY department_id) AS total_salary_dept
FROM employees;Считает суммарную зарплату по отделу, но каждая строка остаётся отдельной.
Ключевые отличия от обычных агрегатных функций
Агрегатные функции (
SUM,AVG) обычно сжимают строки (поGROUP BY).Оконные функции не уменьшают число строк, а дают вычисленное значение для каждой строки в контексте окна.
Last updated
Was this helpful?