Vensterfuncties
Vensterfuncties vormen 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:
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 opgegeven criteria, waardoor alleen de ID's en hun bijbehorende somwaarden worden geretourneerd.
Daarom zijn windowfuncties essentieel om dit probleem aan te pakken.
Implementatie
We kunnen het gewenste resultaat verkrijgen met de volgende query:
1234567SELECT sales_id, product_id, sales_date, amount, SUM(amount) OVER (PARTITION BY product_id) AS Total_Revenue_Per_Product FROM Sales;
Een algemene syntaxis voor het creëren 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 (bijv.
SUM
,AVG
,COUNT
) die een berekening uitvoert over een reeks rijen gedefinieerd door het venster; - OVER: Trefwoord 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: Geeft de volgorde van de rijen binnen elke partitie aan;
- order_column: De kolom die wordt gebruikt om de rijen binnen elke partitie te ordenen.
- FROM: Geeft de brontabel aan waarvan de gegevens worden opgehaald;
- table_name: De naam van de tabel waarvan gegevens worden geselecteerd.
Bedankt voor je feedback!
Vraag AI
Vraag AI
Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.
Awesome!
Completion rate improved to 4.35
Vensterfuncties
Veeg om het menu te tonen
Vensterfuncties vormen 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:
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 opgegeven criteria, waardoor alleen de ID's en hun bijbehorende somwaarden worden geretourneerd.
Daarom zijn windowfuncties essentieel om dit probleem aan te pakken.
Implementatie
We kunnen het gewenste resultaat verkrijgen met de volgende query:
1234567SELECT sales_id, product_id, sales_date, amount, SUM(amount) OVER (PARTITION BY product_id) AS Total_Revenue_Per_Product FROM Sales;
Een algemene syntaxis voor het creëren 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 (bijv.
SUM
,AVG
,COUNT
) die een berekening uitvoert over een reeks rijen gedefinieerd door het venster; - OVER: Trefwoord 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: Geeft de volgorde van de rijen binnen elke partitie aan;
- order_column: De kolom die wordt gebruikt om de rijen binnen elke partitie te ordenen.
- FROM: Geeft de brontabel aan waarvan de gegevens worden opgehaald;
- table_name: De naam van de tabel waarvan gegevens worden geselecteerd.
Bedankt voor je feedback!