Comparer ROW_NUMBER(), RANK() et DENSE_RANK()
Parmi les fonctions de fenêtrage de classement, ROW_NUMBER() est la plus courante, suivie de RANK() et DENSE_RANK(). Chacune de ces fonctions de classement (ainsi que NTILE()) propose une façon différente de classer les enregistrements dans SQL Server.
Dans cet exercice, nous voulons déterminer à quelle fréquence nous observons le type d'incident 3 dans notre ensemble de données. Nous souhaitons classer le nombre d'incidents en ordre décroissant, de sorte que la date ayant le plus grand nombre d'incidents ait un numéro de ligne, un rang et un rang dense de 1, et ainsi de suite. Pour faciliter le suivi, nous n'inclurons que les dates ayant au moins 8 incidents.
Cette activité fait partie du cours
Analyse de séries chronologiques dans SQL Server
Instructions de l’exercice
- Complétez chaque fonction de fenêtrage en vous basant sur l'alias de colonne. Vous devez utiliser
ROW_NUMBER(),RANK()etDENSE_RANK()exactement une fois chacun. - Complétez la clause
OVERen ordonnant selonir.NumberOfIncidentsen ordre décroissant.
Exercice interactif pratique
Essayez cet exercice en complétant ce code d’exemple.
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;