Modulelessen (3/4)
Posities: ROW_NUMBER, RANK en DENSE_RANK
Posities: ROW_NUMBER, RANK en DENSE_RANK
Naast aggregeren blinken vensterfuncties ook uit bij het ordenen en rangschikken. Er zijn functies die specifiek zijn ontworpen om binnen vensters te werken (OVER() wordt verplicht) die volgnummers of rangschikkingsposities toewijzen.
Om ze te laten werken tegen een criterium, moeten we de ORDER BY clausule in OVER() gebruiken.
Het rankingtrio
ROW_NUMBER(): wijst een gewoon volgnummer (1, 2, 3...) toe aan elke rij, waardoor de banden willekeurig worden verbroken.RANK(): Produceert het "Olympische Spelen"-effect: 1, 2, 2, 4. Het laat een gat achter (de "3" wordt overgeslagen) en kent dezelfde rang toe in geval van gelijkspel.DENSE_RANK(): Verdicht de rangen: 1, 2, 2, 3. Er is nooit een gat na een gelijkspel.
SELECT
product_name,
price,
RANK() OVER(ORDER BY price DESC) AS price_rank
FROM products;Door PARTITION BY en ORDER BY samen te combineren in OVER() kunnen we "de top 3 voor elke categorie" krijgen!
Haal 'voornaam', 'achternaam' en 'id' uit de klantentabel ('klanten') (neem aan dat 'id' het identificatienummer is). Voeg een kolom 'rang' toe met DENSE_RANK() op basis van 'id' aflopend (van hoog naar laag).
Toon hint
DENSE_RANK() OVER(ORDER BY id DESC).
Oplossing beschikbaar na 3 pogingen
Bouw een ranking op voor elke 'category_id' op basis van de prijs van de producten ('products'). Extraheer 'category_id', 'id', 'price' en voeg 'price_rank' toe met behulp van ROW_NUMBER() in aflopende 'price'-volgorde, gepartitioneerd op 'category_id'.
Toon hint
Combineer PARTITIE OP categorie_id ORDER OP prijs DESC in de OVER.
Oplossing beschikbaar na 3 pogingen