Sobes.tech
Middle
143
questionbank

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

Ответ от нейросети

sobes.tech AI

Оконные функции в SQL выполняют агрегацию данных в наборе строк, связанных текущей строкой, но при этом не группируют результирующий набор данных. Это позволяет выполнять вычисления, такие как кумулятивные суммы, скользящие средние или ранжирование, сохраняя при этом все строки исходного запроса.

Основные цели использования оконных функций:

  • Ранжирование: Присвоение ранга каждой строке в определенном окне.
    -- Получаем ранг сотрудников по зарплате внутри каждого отдела
    SELECT
        employee_name,
        salary,
        department,
        RANK() OVER (PARTITION BY department ORDER BY salary DESC) as department_rank
    FROM
        employees;
    
  • Вычисление статистик по группе строк без группировки: Агрегирование данных в пределах "окна" строк, сохраняя детализацию на уровне строк.
    -- Вычисляем среднюю зарплату по всему отделу для каждой строки
    SELECT
        employee_name,
        salary,
        department,
        AVG(salary) OVER (PARTITION BY department) as avg_department_salary
    FROM
        employees;
    
  • Сравнение текущей строки с другими строками в окне: Доступ к данным из предыдущих или последующих строк в окне.
    -- Получаем зарплату предыдущего сотрудника в отделе по убыванию зарплаты
    SELECT
        employee_name,
        salary,
        department,
        LAG(salary, 1, 0) OVER (PARTITION BY department ORDER BY salary DESC) as previous_salary
    FROM
        employees;
    
  • Расчеты с накопительным итогом: Вычисление сумм, средних и других агрегаций по нарастающему итогу.
    -- Вычисляем кумулятивную сумму продаж по дате
    SELECT
        sale_date,
        amount,
        SUM(amount) OVER (ORDER BY sale_date) as cumulative_sales
    FROM
        sales;
    

В отличие от обычных функций агрегации (GROUP BY), оконные функции не схлопывают строки, что делает их мощным инструментом для аналитических запросов и детального анализа данных.