Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Vinduesfunktioner | Nogle Yderligere Emner
Avancerede Teknikker i SQL

bookVinduesfunktioner

Window-funktioner er en kategori af SQL-funktioner, der udfører beregninger på tværs af et sæt rækker relateret til den aktuelle række inden for et defineret vindue eller partition.
De bruges til at udføre beregninger og analyser over et delmængde af rækker uden at reducere resultatmængden, i modsætning til aggregeringsfunktioner, der typisk reducerer antallet af rækker returneret af en forespørgsel.

Forklaring

Antag, at vi har følgende Sales-tabel:

Hvis vores mål er at beregne den samlede omsætning for hvert specifikt produkt og vise det i en ekstra kolonne i hovedtabellen i stedet for at generere en ny grupperet tabel, kan resultatet se således ud:

Men hvordan kan vi gøre det?
At bruge GROUP BY er ikke egnet til denne opgave, fordi denne klausul reducerer antallet af rækker ved at gruppere dem efter specificerede kriterier, hvilket resulterer i, at kun ID'er og deres tilsvarende sumværdier returneres.

Derfor er vinduesfunktioner essentielle for at løse dette problem.

Implementering

Vi kan opnå det ønskede resultat ved at bruge følgende forespørgsel:

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 generel syntaks for at oprette en vinduesfunktion kan beskrives som følger:

SELECT 
    aggregation_func() OVER (
        PARTITION BY partition_column
        ORDER BY order_column
    )
FROM 
    table_name;
  • SELECT: Angiver, at en forespørgsel skal påbegyndes;
  • aggregation_func(): Den aggregeringsfunktion (f.eks. SUM, AVG, COUNT), der udfører en beregning over et sæt rækker defineret af vinduet;
  • OVER: Nøgleord, der introducerer vinduesfunktionen;
  • PARTITION BY: Opdeler resultatmængden i partitioner baseret på værdierne i de angivne kolonner. Vinduesfunktionen opererer separat på hver partition;
    • partition_column: Kolonnen, der bruges til at opdele resultatmængden.
  • ORDER BY: Angiver rækkefølgen af rækkerne inden for hver partition;
    • order_column: Kolonnen, der bruges til at sortere rækkerne inden for hver partition.
  • FROM: Angiver den kildetabel, hvorfra dataene hentes;
    • table_name: Navnet på tabellen, hvorfra dataene vælges.
question mark

Hvilken klausul bruges til at definere partitioneringen af en vinduesfunktion?

Select the correct answer

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 3. Kapitel 3

Spørg AI

expand

Spørg AI

ChatGPT

Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat

Awesome!

Completion rate improved to 4.35

bookVinduesfunktioner

Stryg for at vise menuen

Window-funktioner er en kategori af SQL-funktioner, der udfører beregninger på tværs af et sæt rækker relateret til den aktuelle række inden for et defineret vindue eller partition.
De bruges til at udføre beregninger og analyser over et delmængde af rækker uden at reducere resultatmængden, i modsætning til aggregeringsfunktioner, der typisk reducerer antallet af rækker returneret af en forespørgsel.

Forklaring

Antag, at vi har følgende Sales-tabel:

Hvis vores mål er at beregne den samlede omsætning for hvert specifikt produkt og vise det i en ekstra kolonne i hovedtabellen i stedet for at generere en ny grupperet tabel, kan resultatet se således ud:

Men hvordan kan vi gøre det?
At bruge GROUP BY er ikke egnet til denne opgave, fordi denne klausul reducerer antallet af rækker ved at gruppere dem efter specificerede kriterier, hvilket resulterer i, at kun ID'er og deres tilsvarende sumværdier returneres.

Derfor er vinduesfunktioner essentielle for at løse dette problem.

Implementering

Vi kan opnå det ønskede resultat ved at bruge følgende forespørgsel:

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 generel syntaks for at oprette en vinduesfunktion kan beskrives som følger:

SELECT 
    aggregation_func() OVER (
        PARTITION BY partition_column
        ORDER BY order_column
    )
FROM 
    table_name;
  • SELECT: Angiver, at en forespørgsel skal påbegyndes;
  • aggregation_func(): Den aggregeringsfunktion (f.eks. SUM, AVG, COUNT), der udfører en beregning over et sæt rækker defineret af vinduet;
  • OVER: Nøgleord, der introducerer vinduesfunktionen;
  • PARTITION BY: Opdeler resultatmængden i partitioner baseret på værdierne i de angivne kolonner. Vinduesfunktionen opererer separat på hver partition;
    • partition_column: Kolonnen, der bruges til at opdele resultatmængden.
  • ORDER BY: Angiver rækkefølgen af rækkerne inden for hver partition;
    • order_column: Kolonnen, der bruges til at sortere rækkerne inden for hver partition.
  • FROM: Angiver den kildetabel, hvorfra dataene hentes;
    • table_name: Navnet på tabellen, hvorfra dataene vælges.
question mark

Hvilken klausul bruges til at definere partitioneringen af en vinduesfunktion?

Select the correct answer

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 3. Kapitel 3
some-alt