Sobes.tech
Middle

Waarvoor worden vensterfuncties in SQL gebruikt?

sobes.tech AI

Antwoord van AI

De vensterfuncties in SQL voeren aggregaties uit in een set rijen die gerelateerd zijn aan de huidige rij, maar groeperen de resultaatset niet. Dit maakt het mogelijk om berekeningen uit te voeren zoals cumulatieve sommen, bewegende gemiddelden of rangschikkingen, terwijl alle rijen van de oorspronkelijke query behouden blijven.

De belangrijkste doelen van het gebruik van vensterfuncties:

  • Rangschikking: Toewijzen van een rang aan elke rij binnen een bepaald venster.
    -- Krijg de rang van werknemers op basis van salaris binnen elke afdeling
    SELECT
        employee_name,
        salary,
        department,
        RANK() OVER (PARTITION BY department ORDER BY salary DESC) as department_rank
    FROM
        employees;
    
  • Statistieken berekenen per groep rijen zonder groepering: Gegevensaggregatie binnen een "venster" van rijen, terwijl de detaillering op rijniveau behouden blijft.
    -- Bereken het gemiddelde salaris per afdeling voor elke rij
    SELECT
        employee_name,
        salary,
        department,
        AVG(salary) OVER (PARTITION BY department) as avg_department_salary
    FROM
        employees;
    
  • Vergelijking van de huidige rij met andere rijen in het venster: Toegang tot gegevens uit vorige of volgende rijen in het venster.
    -- Krijg het salaris van de vorige werknemer in de afdeling in aflopende volgorde van salaris
    SELECT
        employee_name,
        salary,
        department,
        LAG(salary, 1, 0) OVER (PARTITION BY department ORDER BY salary DESC) as previous_salary
    FROM
        employees;
    
  • Berekeningen met cumulatieve som: Berekening van sommen, gemiddelden en andere aggregaties in een oplopende cumulatie.
    -- Bereken de cumulatieve som van verkopen per datum
    SELECT
        sale_date,
        amount,
        SUM(amount) OVER (ORDER BY sale_date) as cumulative_sales
    FROM
        sales;
    

In tegenstelling tot gewone aggregatiefuncties (GROUP BY), collimiteren vensterfuncties rijen niet samen, waardoor ze een krachtig hulpmiddel zijn voor analytische queries en gedetailleerde gegevensanalyse.