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

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:

12
SELECT * FROM sales
copy

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:

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

Suggested prompts:

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

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:

12
SELECT * FROM sales
copy

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:

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 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.
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 2
some-alt