Comparație între ROW_NUMBER(), RANK() și DENSE_RANK()
Dintre funcțiile de fereastră pentru clasament, ROW_NUMBER() este cea mai frecvent utilizată, urmată de RANK() și DENSE_RANK(). Fiecare dintre aceste funcții (precum și NTILE()) oferă o modalitate diferită de a clasifica înregistrările în SQL Server.
În acest exercițiu, vrem să determinăm cât de frecvent apare tipul 3 de incident în setul nostru de date. Dorim să clasăm numărul de incidente în ordine descrescătoare, astfel încât data cu cel mai mare număr de incidente să primească numărul de rând, rangul și rangul dens egal cu 1, și tot așa mai departe. Pentru a fi mai ușor de urmărit, vom include doar datele cu cel puțin 8 incidente.
Acest exercițiu face parte din cursul
Analiza seriilor de timp în SQL Server
Instrucțiuni pentru exercițiu
- Completează fiecare funcție de fereastră în funcție de aliasul coloanei. Trebuie să folosești
ROW_NUMBER(),RANK()șiDENSE_RANK()exact câte o dată. - Completează clauza
OVERcu ordonare dupăir.NumberOfIncidentsîn ordine descrescătoare.
Exercițiu interactiv practic
Încearcă acest exercițiu completând acest cod de exemplu.
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;