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
Avanserte Teknikker i SQL

bookVindusfunksjoner

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:

1234567
SELECT sales_id, product_id, sales_date, amount, SUM(amount) OVER (PARTITION BY product_id) AS Total_Revenue_Per_Product FROM Sales;
copy

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.
question mark

Hvilken klausul brukes for å definere partisjoneringen av en vindusfunksjon?

Select the correct answer

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 3. Kapittel 3

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

Awesome!

Completion rate improved to 4.35

bookVindusfunksjoner

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:

1234567
SELECT sales_id, product_id, sales_date, amount, SUM(amount) OVER (PARTITION BY product_id) AS Total_Revenue_Per_Product FROM Sales;
copy

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.
question mark

Hvilken klausul brukes for å definere partisjoneringen av en vindusfunksjon?

Select the correct answer

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 3. Kapittel 3
some-alt