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 jeu de données. Nous souhaitons classer le nombre d’incidents par ordre décroissant, de sorte que la date avec le plus grand nombre d’incidents ait un numéro de ligne, un rang et un rang dense égaux à 1, et ainsi de suite. Pour faciliter la lecture, nous n’inclurons que les dates ayant au moins 8 incidents.
Cet exercice fait partie du cours
<cours>Analyse de séries temporelles dans SQL Server</cours>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 parir.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;