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
Geavanceerde Technieken in SQL

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 in 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(): Wijs 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 door de functie DENSE_RANK() te gebruiken:

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 resultaatstabel bevat alle informatie uit de hoofdtafel en een extra kolom die de rang van elke verkoop voor het betreffende product weergeeft.

Waardevergelijkingsfuncties

Waardevergelijkende vensterfuncties in SQL worden gebruikt om waarden in de huidige rij te vergelijken met waarden in andere rijen binnen dezelfde partitie.
Deze functies zijn bijzonder nuttig voor taken zoals het analyseren van trends, het uitvoeren van berekeningen op basis van aangrenzende rijen, of het benaderen van specifieke rijwaarden binnen een gedefinieerd venster. Er zijn verschillende waardevergelijkingsfuncties in SQL:

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

Voorbeeld

We gebruiken de waardevergelijkende vensterfunctie 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

Hierdoor kunnen we eenvoudig informatie over verkoopverschillen voor elk specifiek product ophalen zonder subqueries of opgeslagen procedures te gebruiken.
We kunnen ook verschillen voor alle verkopen berekenen zonder te partitioneren 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 4

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

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 in 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(): Wijs 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 door de functie DENSE_RANK() te gebruiken:

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 resultaatstabel bevat alle informatie uit de hoofdtafel en een extra kolom die de rang van elke verkoop voor het betreffende product weergeeft.

Waardevergelijkingsfuncties

Waardevergelijkende vensterfuncties in SQL worden gebruikt om waarden in de huidige rij te vergelijken met waarden in andere rijen binnen dezelfde partitie.
Deze functies zijn bijzonder nuttig voor taken zoals het analyseren van trends, het uitvoeren van berekeningen op basis van aangrenzende rijen, of het benaderen van specifieke rijwaarden binnen een gedefinieerd venster. Er zijn verschillende waardevergelijkingsfuncties in SQL:

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

Voorbeeld

We gebruiken de waardevergelijkende vensterfunctie 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

Hierdoor kunnen we eenvoudig informatie over verkoopverschillen voor elk specifiek product ophalen zonder subqueries of opgeslagen procedures te gebruiken.
We kunnen ook verschillen voor alle verkopen berekenen zonder te partitioneren 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 4
some-alt