Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Vindusfunksjoner | Noen Tilleggs­emner
SQL-optimalisering og spørringsfunksjoner

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:

12
SELECT * 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 det?
Å 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:

1234567
SELECT sales_id, product_id, sales_date, amount, SUM(amount) OVER (PARTITION BY product_id) AS Total_Revenue_Per_Product FROM Sales;
Beskrivelse av spørringen
expand arrow
  • Funksjonsnavn: SUM
  • Beskrivelse: Beregner summen av en spesifisert kolonne innenfor et definert vindu.
  • Argumenter:
    • Amount: Kolonnen som skal summeres.
  • Vindusfunksjon:
    • OVER: Angir vinduet hvor aggregeringen utføres.
    • PARTITION BY Product_ID: Deler resultatsettet inn i partisjoner basert på verdiene i kolonnen Product_ID. Summen beregnes separat for hver partisjon.
  • Alias: Total_Revenue_Per_Product: Navnet som er tildelt den beregnede summen for hver partisjon.
  • Bruk: Denne funksjonen brukes til å beregne total omsetning per produkt, ved å summere beløpene for hver produkt-ID.
  • Resultat: Resultatsettet inkluderer kolonnene Sales_ID, Product_ID, Sales_Date, Amount og Total_Revenue_Per_Product fra tabellen sales, hvor Total_Revenue_Per_Product representerer total omsetning for hver produkt-ID.
  • Sortering: Resultatsettet er sortert etter Sales_Date.

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(): aggregeringsfunksjonen (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: angir tabellen hvor dataene hentes fra;
    • table_name: navnet på tabellen hvor dataene velges fra.
question mark

Hvilken klausul brukes for å definere partisjoneringen av en vindusfunksjon?

Velg det helt riktige svaret

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 3. Kapittel 2

Spør AI

expand

Spør AI

ChatGPT

Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår

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:

12
SELECT * 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 det?
Å 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:

1234567
SELECT sales_id, product_id, sales_date, amount, SUM(amount) OVER (PARTITION BY product_id) AS Total_Revenue_Per_Product FROM Sales;
Beskrivelse av spørringen
expand arrow
  • Funksjonsnavn: SUM
  • Beskrivelse: Beregner summen av en spesifisert kolonne innenfor et definert vindu.
  • Argumenter:
    • Amount: Kolonnen som skal summeres.
  • Vindusfunksjon:
    • OVER: Angir vinduet hvor aggregeringen utføres.
    • PARTITION BY Product_ID: Deler resultatsettet inn i partisjoner basert på verdiene i kolonnen Product_ID. Summen beregnes separat for hver partisjon.
  • Alias: Total_Revenue_Per_Product: Navnet som er tildelt den beregnede summen for hver partisjon.
  • Bruk: Denne funksjonen brukes til å beregne total omsetning per produkt, ved å summere beløpene for hver produkt-ID.
  • Resultat: Resultatsettet inkluderer kolonnene Sales_ID, Product_ID, Sales_Date, Amount og Total_Revenue_Per_Product fra tabellen sales, hvor Total_Revenue_Per_Product representerer total omsetning for hver produkt-ID.
  • Sortering: Resultatsettet er sortert etter Sales_Date.

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(): aggregeringsfunksjonen (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: angir tabellen hvor dataene hentes fra;
    • table_name: navnet på tabellen hvor dataene velges fra.
Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 3. Kapittel 2
some-alt