Sobes.tech
Middle

За какво се използват прозоречните функции в SQL?

sobes.tech AI

Отговор от 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), функциите за прозорец не обединяват редове, което ги прави мощен инструмент за аналитични заявки и подробен анализ на данни.