Vindusfunksjoner
Vindusfunksjoner er en kategori av SQL-funksjoner som utfører beregninger over et sett med rader relatert til den nåværende raden innenfor et definert vindu eller partisjon.
De brukes til å utføre beregninger og analyser over et delsett av rader uten å redusere resultatsettet, i motsetning til aggregeringsfunksjoner som vanligvis reduserer antall rader returnert av en spørring.
Forklaring
Anta at vi har følgende Sales
-tabell:
Hvis målet vårt er å beregne total omsetning for hvert spesifikke produkt og vise det i en ekstra kolonne i hovedtabellen i stedet for å generere en ny gruppert tabell, kan resultatet se slik ut:
Men hvordan kan vi gjøre det?
Å bruke GROUP BY
er ikke egnet for denne oppgaven fordi denne klausulen reduserer antall rader ved å gruppere dem etter angitte kriterier, noe som resulterer i at kun ID-ene og deres tilhørende sumverdier returneres.
Derfor er vindusfunksjoner essensielle for å løse dette problemet.
Implementering
Vi kan oppnå ønsket resultat ved å bruke følgende spørring:
1234567SELECT sales_id, product_id, sales_date, amount, SUM(amount) OVER (PARTITION BY product_id) AS Total_Revenue_Per_Product FROM Sales;
En generell syntaks for å opprette en vindusfunksjon kan beskrives som følger:
SELECT
aggregation_func() OVER (
PARTITION BY partition_column
ORDER BY order_column
)
FROM
table_name;
- SELECT: Indikerer at en spørring skal starte;
- aggregation_func(): Aggregatfunksjonen (f.eks.
SUM
,AVG
,COUNT
) som utfører en beregning over et sett med rader definert av vinduet; - OVER: Nøkkelord som introduserer vindusfunksjonen;
- PARTITION BY: Deler resultatsettet inn i partisjoner basert på verdiene i de angitte kolonnene. Vindusfunksjonen opererer separat på hver partisjon;
- partition_column: Kolonnen som brukes til å partisjonere resultatsettet.
- ORDER BY: Angir rekkefølgen på radene innenfor hver partisjon;
- order_column: Kolonnen som brukes til å sortere radene innenfor hver partisjon.
- FROM: Indikerer tabellen som dataene hentes fra;
- table_name: Navnet på tabellen det hentes data fra.
Takk for tilbakemeldingene dine!
Spør AI
Spør AI
Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår
Awesome!
Completion rate improved to 4.35
Vindusfunksjoner
Sveip for å vise menyen
Vindusfunksjoner er en kategori av SQL-funksjoner som utfører beregninger over et sett med rader relatert til den nåværende raden innenfor et definert vindu eller partisjon.
De brukes til å utføre beregninger og analyser over et delsett av rader uten å redusere resultatsettet, i motsetning til aggregeringsfunksjoner som vanligvis reduserer antall rader returnert av en spørring.
Forklaring
Anta at vi har følgende Sales
-tabell:
Hvis målet vårt er å beregne total omsetning for hvert spesifikke produkt og vise det i en ekstra kolonne i hovedtabellen i stedet for å generere en ny gruppert tabell, kan resultatet se slik ut:
Men hvordan kan vi gjøre det?
Å bruke GROUP BY
er ikke egnet for denne oppgaven fordi denne klausulen reduserer antall rader ved å gruppere dem etter angitte kriterier, noe som resulterer i at kun ID-ene og deres tilhørende sumverdier returneres.
Derfor er vindusfunksjoner essensielle for å løse dette problemet.
Implementering
Vi kan oppnå ønsket resultat ved å bruke følgende spørring:
1234567SELECT sales_id, product_id, sales_date, amount, SUM(amount) OVER (PARTITION BY product_id) AS Total_Revenue_Per_Product FROM Sales;
En generell syntaks for å opprette en vindusfunksjon kan beskrives som følger:
SELECT
aggregation_func() OVER (
PARTITION BY partition_column
ORDER BY order_column
)
FROM
table_name;
- SELECT: Indikerer at en spørring skal starte;
- aggregation_func(): Aggregatfunksjonen (f.eks.
SUM
,AVG
,COUNT
) som utfører en beregning over et sett med rader definert av vinduet; - OVER: Nøkkelord som introduserer vindusfunksjonen;
- PARTITION BY: Deler resultatsettet inn i partisjoner basert på verdiene i de angitte kolonnene. Vindusfunksjonen opererer separat på hver partisjon;
- partition_column: Kolonnen som brukes til å partisjonere resultatsettet.
- ORDER BY: Angir rekkefølgen på radene innenfor hver partisjon;
- order_column: Kolonnen som brukes til å sortere radene innenfor hver partisjon.
- FROM: Indikerer tabellen som dataene hentes fra;
- table_name: Navnet på tabellen det hentes data fra.
Takk for tilbakemeldingene dine!