Sobes.tech
Middle

Mire használják az ablakfüggvényeket SQL-ben?

sobes.tech MI

Válasz az MI-től

Az SQL ablakfüggvényei az aktuális sorhoz kapcsolódó sorok halmazában végzik az adatok aggregálását, de nem csoportosítják az eredményhalmazt. Ez lehetővé teszi olyan számítások végrehajtását, mint az összegző kumulatív értékek, mozgó átlagok vagy rangsorolások, miközben minden eredeti lekérdezés sorát megőrzi.

Az ablakfüggvények fő céljai:

  • Rangsorolás: Minden sorhoz rangot rendel egy meghatározott ablakon belül.
    -- A dolgozók rangsorolása fizetés szerint minden osztályon belül
    SELECT
        employee_name,
        salary,
        department,
        RANK() OVER (PARTITION BY department ORDER BY salary DESC) as department_rank
    FROM
        employees;
    
  • Statisztikák számítása csoport nélküli sorokra: Adatok aggregálása "ablak" belül, miközben a részletek szinten megmaradnak.
    -- Átlagfizetés számítása az egész osztályra minden sor esetében
    SELECT
        employee_name,
        salary,
        department,
        AVG(salary) OVER (PARTITION BY department) as avg_department_salary
    FROM
        employees;
    
  • A jelenlegi sor összehasonlítása más sorokkal az ablakban: Hozzáférés az előző vagy következő sorok adataihoz az ablakban.
    -- Az előző alkalmazott fizetésének lekérése az osztályban csökkenő sorrendben
    SELECT
        employee_name,
        salary,
        department,
        LAG(salary, 1, 0) OVER (PARTITION BY department ORDER BY salary DESC) as previous_salary
    FROM
        employees;
    
  • Kumulatív összegzések: Összegek, átlagok és más aggregátumok számítása növekvő kumulációban.
    -- Az értékesítések kumulatív összegének számítása dátum szerint
    SELECT
        sale_date,
        amount,
        SUM(amount) OVER (ORDER BY sale_date) as cumulative_sales
    FROM
        sales;
    

A normál aggregáló függvényektől (GROUP BY) eltérően, az ablakfüggvények nem egyesítik a sorokat, így erőteljes eszközt jelentenek elemző lekérdezésekhez és részletes adatelemzéshez.