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

bookTypen Vensterfuncties

Laten we kort de belangrijkste typen vensterfuncties verkennen die in SQL worden gebruikt.

Aggregatiefuncties

Dit zijn de standaard aggregatiefuncties (AVG, SUM, MAX, MIN, COUNT) die binnen een venstercontext worden toegepast. We hebben dit type vensterfunctie al gebruikt in het vorige hoofdstuk.

Rangschikkingsfuncties

Rangschikkingsfuncties in SQL zijn een type vensterfunctie waarmee u een rang aan elke rij binnen een partitie van een resultaatset kunt toewijzen. Deze functies zijn bijzonder nuttig voor het uitvoeren van geordende berekeningen en analyses.

  • RANK(): wijst een unieke rang toe aan elke verschillende rij binnen de partitie op basis van de ORDER BY-clausule. Rijen met gelijke waarden krijgen dezelfde rang, waarbij er gaten in de rangschikking ontstaan;

  • DENSE_RANK(): vergelijkbaar met RANK(), maar zonder gaten in de rangschikkingsvolgorde;

  • NTILE(n): verdeelt de rijen in een geordende partitie in n groepen en wijst een groepsnummer toe aan elke rij.

Voorbeeld

We rangschikken de verkopen op basis van het Amount voor elke ProductID in oplopende volgorde met behulp van de functie DENSE_RANK():

12345678
SELECT sales_id, product_id, sales_date, amount, DENSE_RANK() OVER (PARTITION BY product_id ORDER BY amount DESC) AS dense_rank_amount FROM Sales;
copy

De resultaatset bevat alle informatie uit de hoofdtafel en een extra kolom die de rang van elke verkoop voor het betreffende product weergeeft.

Waardevergelijkingsfuncties

Waardevergelijkingsvensterfuncties in SQL worden gebruikt om waarden in de huidige rij te vergelijken met waarden in andere rijen binnen dezelfde partitie.
Deze functies zijn met name nuttig voor taken waarbij trends worden geanalyseerd, berekeningen worden uitgevoerd op basis van aangrenzende rijen, of specifieke rijwaarden binnen een gedefinieerd venster worden opgehaald. Er zijn verschillende waardevergelijkingsfuncties in SQL:

  • LAG(): haalt de waarde op uit een vorige rij in de resultaatset zonder dat een self-join nodig is;
  • LEAD(): haalt de waarde op uit een volgende rij in de resultaatset zonder dat een self-join nodig is;
  • FIRST_VALUE(): retourneert de waarde van de eerste rij in het vensterframe;
  • LAST_VALUE(): retourneert de waarde van de laatste rij in het vensterframe.

Voorbeeld

We gebruiken de waardevergelijkingsvensterfunctie LAG() om de verandering in verkoopbedrag ten opzichte van de vorige verkoop voor elk product te berekenen:

1234567891011
SELECT sales_id, product_id, sales_date, amount, LAG(amount, 1) OVER (PARTITION BY product_id ORDER BY sales_date) AS previous_amount, amount - LAG(amount, 1) OVER (PARTITION BY product_id ORDER BY sales_date) AS amount_change FROM Sales ORDER BY product_id, sales_date;
copy

Hiermee kan eenvoudig informatie over verkoopverschillen voor elk specifiek product worden verkregen zonder gebruik te maken van subquery's of opgeslagen procedures.
Het is ook mogelijk om verschillen voor alle verkopen zonder partitionering te berekenen met de volgende query:

123456789
SELECT sales_id, product_id, sales_date, amount, LAG(amount, 1) OVER (ORDER BY sales_date) AS previous_amount, amount - LAG(amount, 1) OVER (ORDER BY sales_date) AS amount_change FROM Sales;
copy

Je ziet dat we de PARTITION BY clausule niet hebben opgenomen in het OVER blok. Dit betekent dat we niet alleen de vorige waarden voor een specifiek product willen ophalen, maar voor alle verkopen in de tabel.

question mark

Wat doet de functie NTILE() in SQL?

Select the correct answer

Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 3. Hoofdstuk 3

Vraag AI

expand

Vraag AI

ChatGPT

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

Awesome!

Completion rate improved to 4.55

bookTypen Vensterfuncties

Veeg om het menu te tonen

Laten we kort de belangrijkste typen vensterfuncties verkennen die in SQL worden gebruikt.

Aggregatiefuncties

Dit zijn de standaard aggregatiefuncties (AVG, SUM, MAX, MIN, COUNT) die binnen een venstercontext worden toegepast. We hebben dit type vensterfunctie al gebruikt in het vorige hoofdstuk.

Rangschikkingsfuncties

Rangschikkingsfuncties in SQL zijn een type vensterfunctie waarmee u een rang aan elke rij binnen een partitie van een resultaatset kunt toewijzen. Deze functies zijn bijzonder nuttig voor het uitvoeren van geordende berekeningen en analyses.

  • RANK(): wijst een unieke rang toe aan elke verschillende rij binnen de partitie op basis van de ORDER BY-clausule. Rijen met gelijke waarden krijgen dezelfde rang, waarbij er gaten in de rangschikking ontstaan;

  • DENSE_RANK(): vergelijkbaar met RANK(), maar zonder gaten in de rangschikkingsvolgorde;

  • NTILE(n): verdeelt de rijen in een geordende partitie in n groepen en wijst een groepsnummer toe aan elke rij.

Voorbeeld

We rangschikken de verkopen op basis van het Amount voor elke ProductID in oplopende volgorde met behulp van de functie DENSE_RANK():

12345678
SELECT sales_id, product_id, sales_date, amount, DENSE_RANK() OVER (PARTITION BY product_id ORDER BY amount DESC) AS dense_rank_amount FROM Sales;
copy

De resultaatset bevat alle informatie uit de hoofdtafel en een extra kolom die de rang van elke verkoop voor het betreffende product weergeeft.

Waardevergelijkingsfuncties

Waardevergelijkingsvensterfuncties in SQL worden gebruikt om waarden in de huidige rij te vergelijken met waarden in andere rijen binnen dezelfde partitie.
Deze functies zijn met name nuttig voor taken waarbij trends worden geanalyseerd, berekeningen worden uitgevoerd op basis van aangrenzende rijen, of specifieke rijwaarden binnen een gedefinieerd venster worden opgehaald. Er zijn verschillende waardevergelijkingsfuncties in SQL:

  • LAG(): haalt de waarde op uit een vorige rij in de resultaatset zonder dat een self-join nodig is;
  • LEAD(): haalt de waarde op uit een volgende rij in de resultaatset zonder dat een self-join nodig is;
  • FIRST_VALUE(): retourneert de waarde van de eerste rij in het vensterframe;
  • LAST_VALUE(): retourneert de waarde van de laatste rij in het vensterframe.

Voorbeeld

We gebruiken de waardevergelijkingsvensterfunctie LAG() om de verandering in verkoopbedrag ten opzichte van de vorige verkoop voor elk product te berekenen:

1234567891011
SELECT sales_id, product_id, sales_date, amount, LAG(amount, 1) OVER (PARTITION BY product_id ORDER BY sales_date) AS previous_amount, amount - LAG(amount, 1) OVER (PARTITION BY product_id ORDER BY sales_date) AS amount_change FROM Sales ORDER BY product_id, sales_date;
copy

Hiermee kan eenvoudig informatie over verkoopverschillen voor elk specifiek product worden verkregen zonder gebruik te maken van subquery's of opgeslagen procedures.
Het is ook mogelijk om verschillen voor alle verkopen zonder partitionering te berekenen met de volgende query:

123456789
SELECT sales_id, product_id, sales_date, amount, LAG(amount, 1) OVER (ORDER BY sales_date) AS previous_amount, amount - LAG(amount, 1) OVER (ORDER BY sales_date) AS amount_change FROM Sales;
copy

Je ziet dat we de PARTITION BY clausule niet hebben opgenomen in het OVER blok. Dit betekent dat we niet alleen de vorige waarden voor een specifiek product willen ophalen, maar voor alle verkopen in de tabel.

question mark

Wat doet de functie NTILE() in SQL?

Select the correct answer

Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 3. Hoofdstuk 3
some-alt