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
Can you explain how the PARTITION BY clause works in window functions?
What other aggregate functions can be used with window functions?
Can you show an example using ORDER BY within the window function?
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!