Оконные функции
Оконные функции (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?