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

Suggested prompts:

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

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