Sobes.tech
Middle

Zašto se koriste funkcije prozora u SQL-u?

sobes.tech АИ

Одговор од АИ

Funkcije prozora u SQL-u vrše agregaciju podataka u skupu redova povezanih sa trenutnim redom, ali ne grupišu skup rezultata. Ovo omogućava izvođenje kalkulacija kao što su kumulativne sume, pokretni prosek ili rangiranje, zadržavajući sve redove izvornog upita.

Glavni ciljevi korišćenja funkcija prozora:

  • Rangiranje: Dodeljivanje ranga svakom redu u određenom prozoru.
    -- Dobijanje ranga zaposlenih po plati unutar svakog odeljenja
    SELECT
        employee_name,
        salary,
        department,
        RANK() OVER (PARTITION BY department ORDER BY salary DESC) as department_rank
    FROM
        employees;
    
  • Izračun statistika po grupama redova bez grupisanja: Agregacija podataka unutar "prozora" redova, zadržavajući detalj na nivou reda.
    -- Izračun prosečne plate za celo odeljenje za svaki red
    SELECT
        employee_name,
        salary,
        department,
        AVG(salary) OVER (PARTITION BY department) as avg_department_salary
    FROM
        employees;
    
  • Upoređenje trenutnog reda sa drugim redovima u prozoru: Pristup podacima iz prethodnih ili narednih redova u prozoru.
    -- Dobijanje plate prethodnog zaposlenog u odeljenju u opadajućem redosledu po plati
    SELECT
        employee_name,
        salary,
        department,
        LAG(salary, 1, 0) OVER (PARTITION BY department ORDER BY salary DESC) as previous_salary
    FROM
        employees;
    
  • Izračuni sa kumulativnim zbirom: Izračun suma, proseka i drugih agregata u rastućem kumulativnom obliku.
    -- Izračun kumulativne sume prodaja po datumu
    SELECT
        sale_date,
        amount,
        SUM(amount) OVER (ORDER BY sale_date) as cumulative_sales
    FROM
        sales;
    

Za razliku od običnih funkcija agregacije (GROUP BY), funkcije prozora ne spajaju redove, što ih čini moćnim alatom za analitičke upite i detaljnu analizu podataka.