Sobes.tech
Middle

Do czego służą funkcje okienkowe w SQL?

sobes.tech AI

Odpowiedź od AI

Funkcje okienkowe w SQL wykonują agregację danych w zestawie wierszy powiązanych z bieżącym wierszem, ale nie grupują zbioru wyników. Pozwala to na wykonywanie obliczeń takich jak sumy skumulowane, średnie ruchome czy ranking, zachowując wszystkie wiersze zapytania źródłowego.

Główne cele korzystania z funkcji okienkowych:

  • Ranking: Przypisanie rangi każdemu wierszowi w określonym oknie.
    -- Uzyskanie rangi pracowników według wynagrodzenia w ramach każdego działu
    SELECT
        employee_name,
        salary,
        department,
        RANK() OVER (PARTITION BY department ORDER BY salary DESC) as department_rank
    FROM
        employees;
    
  • Obliczanie statystyk dla grupy wierszy bez grupowania: Agregacja danych w obrębie "okna" wierszy, zachowując szczegółowość na poziomie wiersza.
    -- Obliczanie średniego wynagrodzenia dla całego działu dla każdego wiersza
    SELECT
        employee_name,
        salary,
        department,
        AVG(salary) OVER (PARTITION BY department) as avg_department_salary
    FROM
        employees;
    
  • Porównanie bieżącego wiersza z innymi wierszami w oknie: Dostęp do danych z poprzednich lub następnych wierszy w oknie.
    -- Uzyskanie wynagrodzenia poprzedniego pracownika w dziale w kolejności malejącej według wynagrodzenia
    SELECT
        employee_name,
        salary,
        department,
        LAG(salary, 1, 0) OVER (PARTITION BY department ORDER BY salary DESC) as previous_salary
    FROM
        employees;
    
  • Obliczenia z sumą narastającą: Obliczanie sum, średnich i innych agregacji w sumie narastającej.
    -- Obliczanie sumy narastającej sprzedaży według daty
    SELECT
        sale_date,
        amount,
        SUM(amount) OVER (ORDER BY sale_date) as cumulative_sales
    FROM
        sales;
    

W przeciwieństwie do zwykłych funkcji agregujących (GROUP BY), funkcje okienkowe nie łączą wierszy, co czyni je potężnym narzędziem do zapytań analitycznych i szczegółowej analizy danych.