Verschil tussen ROW_NUMBER(), RANK() en DENSE_RANK()
Van de ranking-windowfuncties komt ROW_NUMBER() het meest voor, gevolgd door RANK() en DENSE_RANK(). Elke van deze rankingfuncties (net als NTILE()) biedt een andere manier om records te rangschikken in SQL Server.
In deze oefening willen we bepalen hoe vaak we incidenttype 3 tegenkomen in onze gegevensset. We willen het aantal incidenten rangschikken in aflopende volgorde, zodat de datum met het hoogste aantal incidenten een row number, rank en dense rank van 1 krijgt, enzovoort. Om het overzichtelijk te houden nemen we alleen datums op met minimaal 8 incidenten.
Deze oefening maakt deel uit van de cursus
Tijdreeksanalyse in SQL Server
Oefeninstructies
- Vul elke windowfunctie in op basis van de kolomalias. Je moet
ROW_NUMBER(),RANK()enDENSE_RANK()elk precies één keer opnemen. - Vul de
OVER-clausule in met sortering opir.NumberOfIncidentsin aflopende volgorde.
Praktische interactieve oefening
Probeer deze oefening eens door deze voorbeeldcode in te vullen.
SELECT
ir.IncidentDate,
ir.NumberOfIncidents,
-- Fill in each window function and ordering
-- Note that all of these are in descending order!
___() OVER (___ ___ ir.NumberOfIncidents ___) AS rownum,
___() OVER (___ ___ ir.NumberOfIncidents ___) AS rk,
___() OVER (___ ___ ir.NumberOfIncidents ___) AS dr
FROM dbo.IncidentRollup ir
WHERE
ir.IncidentTypeID = 3
AND ir.NumberOfIncidents >= 8
ORDER BY
ir.NumberOfIncidents DESC;