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
Fantastisk!
Completion rate forbedret til 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!