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:
12SELECT * FROM sales
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 dette?
Å bruke GROUP BY er ikke egnet for denne oppgaven fordi denne klausulen reduserer antall rader ved å gruppere dem etter spesifiserte 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 slik:
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 den angitte kolonnen(e). 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: angir 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 types of window functions are commonly used in SQL?
Can you show an example using ORDER BY within a window function?
Awesome!
Completion rate improved to 4.55
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:
12SELECT * FROM sales
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 dette?
Å bruke GROUP BY er ikke egnet for denne oppgaven fordi denne klausulen reduserer antall rader ved å gruppere dem etter spesifiserte 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 slik:
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 den angitte kolonnen(e). 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: angir tabellen som dataene hentes fra;
- table_name: navnet på tabellen det hentes data fra.
Takk for tilbakemeldingene dine!