Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Leer Vensterfuncties | Enkele Aanvullende Onderwerpen
SQL-Optimalisatie en Queryfuncties

Vensterfuncties

Veeg om het menu te tonen

Vensterfuncties zijn een categorie SQL-functies die berekeningen uitvoeren over een reeks rijen die gerelateerd zijn aan de huidige rij binnen een gedefinieerd venster of partitie.
Ze worden gebruikt om berekeningen en analyses uit te voeren over een subset van rijen zonder het resultaat te verkleinen, in tegenstelling tot aggregatiefuncties die doorgaans het aantal geretourneerde rijen door een query verminderen.

Uitleg

Stel dat we de volgende Sales-tabel hebben:

12
SELECT * FROM sales

Als ons doel is om de totale omzet voor elk specifiek product te berekenen en deze weer te geven in een extra kolom binnen de hoofdtafel in plaats van een nieuwe gegroepeerde tabel te genereren, kan het resultaat er als volgt uitzien:

Maar hoe kunnen we dit doen?
Het gebruik van GROUP BY is niet geschikt voor deze taak omdat deze clausule het aantal rijen vermindert door ze te groeperen op basis van gespecificeerde criteria, waardoor alleen de ID's en hun bijbehorende somwaarden worden geretourneerd.

Daarom zijn windowfuncties essentieel voor het aanpakken van dit probleem.

Implementatie

Het gewenste resultaat kan worden verkregen met de volgende query:

1234567
SELECT sales_id, product_id, sales_date, amount, SUM(amount) OVER (PARTITION BY product_id) AS Total_Revenue_Per_Product FROM Sales;
Querybeschrijving
expand arrow
  • Functienaam: SUM
  • Beschrijving: Berekent de som van een opgegeven kolom binnen een gedefinieerd venster.
  • Argumenten:
    • Amount: De kolom die wordt opgeteld.
  • Windowfunctie:
    • OVER: Geeft het venster aan waarover de aggregatie wordt uitgevoerd.
    • PARTITION BY Product_ID: Verdeelt het resultaat in partities op basis van de waarden van de kolom Product_ID. De som wordt afzonderlijk per partitie berekend.
  • Alias: Total_Revenue_Per_Product: De naam die aan de berekende som per partitie wordt toegekend.
  • Gebruik: Deze functie wordt gebruikt om de totale omzet per product te berekenen door de bedragen per product-ID op te tellen.
  • Resultaat: Het resultaat bevat de kolommen Sales_ID, Product_ID, Sales_Date, Amount en Total_Revenue_Per_Product uit de tabel sales, waarbij Total_Revenue_Per_Product de totale omzet per product-ID weergeeft.
  • Sortering: Het resultaat wordt gesorteerd op Sales_Date.

Een algemene syntaxis voor het aanmaken van een windowfunctie kan als volgt worden beschreven:

SELECT 
    aggregation_func() OVER (
        PARTITION BY partition_column
        ORDER BY order_column
    )
FROM 
    table_name;
  • SELECT: geeft aan dat een query begint;
  • aggregation_func(): de aggregatiefunctie (bijvoorbeeld SUM, AVG, COUNT) die een berekening uitvoert over een reeks rijen die door het venster worden gedefinieerd;
  • OVER: sleutelwoord dat de windowfunctie introduceert;
  • PARTITION BY: verdeelt het resultaat in partities op basis van de waarden van de opgegeven kolom(men). De windowfunctie werkt afzonderlijk op elke partitie;
    • partition_column: de kolom die wordt gebruikt om het resultaat te partitioneren.
  • ORDER BY: specificeert de volgorde van de rijen binnen elke partitie;
    • order_column: de kolom die wordt gebruikt om de rijen binnen elke partitie te ordenen.
  • FROM: geeft de brontabel aan waaruit de gegevens worden opgehaald;
    • table_name: de naam van de tabel waaruit gegevens worden geselecteerd.
question mark

Welke clausule wordt gebruikt om de partitionering van een windowfunctie te definiëren?

Selecteer het correcte antwoord

Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 3. Hoofdstuk 2

Vraag AI

expand

Vraag AI

ChatGPT

Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.

Vensterfuncties

Vensterfuncties zijn een categorie SQL-functies die berekeningen uitvoeren over een reeks rijen die gerelateerd zijn aan de huidige rij binnen een gedefinieerd venster of partitie.
Ze worden gebruikt om berekeningen en analyses uit te voeren over een subset van rijen zonder het resultaat te verkleinen, in tegenstelling tot aggregatiefuncties die doorgaans het aantal geretourneerde rijen door een query verminderen.

Uitleg

Stel dat we de volgende Sales-tabel hebben:

12
SELECT * FROM sales

Als ons doel is om de totale omzet voor elk specifiek product te berekenen en deze weer te geven in een extra kolom binnen de hoofdtafel in plaats van een nieuwe gegroepeerde tabel te genereren, kan het resultaat er als volgt uitzien:

Maar hoe kunnen we dit doen?
Het gebruik van GROUP BY is niet geschikt voor deze taak omdat deze clausule het aantal rijen vermindert door ze te groeperen op basis van gespecificeerde criteria, waardoor alleen de ID's en hun bijbehorende somwaarden worden geretourneerd.

Daarom zijn windowfuncties essentieel voor het aanpakken van dit probleem.

Implementatie

Het gewenste resultaat kan worden verkregen met de volgende query:

1234567
SELECT sales_id, product_id, sales_date, amount, SUM(amount) OVER (PARTITION BY product_id) AS Total_Revenue_Per_Product FROM Sales;
Querybeschrijving
expand arrow
  • Functienaam: SUM
  • Beschrijving: Berekent de som van een opgegeven kolom binnen een gedefinieerd venster.
  • Argumenten:
    • Amount: De kolom die wordt opgeteld.
  • Windowfunctie:
    • OVER: Geeft het venster aan waarover de aggregatie wordt uitgevoerd.
    • PARTITION BY Product_ID: Verdeelt het resultaat in partities op basis van de waarden van de kolom Product_ID. De som wordt afzonderlijk per partitie berekend.
  • Alias: Total_Revenue_Per_Product: De naam die aan de berekende som per partitie wordt toegekend.
  • Gebruik: Deze functie wordt gebruikt om de totale omzet per product te berekenen door de bedragen per product-ID op te tellen.
  • Resultaat: Het resultaat bevat de kolommen Sales_ID, Product_ID, Sales_Date, Amount en Total_Revenue_Per_Product uit de tabel sales, waarbij Total_Revenue_Per_Product de totale omzet per product-ID weergeeft.
  • Sortering: Het resultaat wordt gesorteerd op Sales_Date.

Een algemene syntaxis voor het aanmaken van een windowfunctie kan als volgt worden beschreven:

SELECT 
    aggregation_func() OVER (
        PARTITION BY partition_column
        ORDER BY order_column
    )
FROM 
    table_name;
  • SELECT: geeft aan dat een query begint;
  • aggregation_func(): de aggregatiefunctie (bijvoorbeeld SUM, AVG, COUNT) die een berekening uitvoert over een reeks rijen die door het venster worden gedefinieerd;
  • OVER: sleutelwoord dat de windowfunctie introduceert;
  • PARTITION BY: verdeelt het resultaat in partities op basis van de waarden van de opgegeven kolom(men). De windowfunctie werkt afzonderlijk op elke partitie;
    • partition_column: de kolom die wordt gebruikt om het resultaat te partitioneren.
  • ORDER BY: specificeert de volgorde van de rijen binnen elke partitie;
    • order_column: de kolom die wordt gebruikt om de rijen binnen elke partitie te ordenen.
  • FROM: geeft de brontabel aan waaruit de gegevens worden opgehaald;
    • table_name: de naam van de tabel waaruit gegevens worden geselecteerd.
Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 3. Hoofdstuk 2
some-alt