Confronto tra ROW_NUMBER(), RANK() e DENSE_RANK()
Tra le funzioni di finestra per il ranking, ROW_NUMBER() è la più comune, seguita da RANK() e DENSE_RANK(). Ognuna di queste funzioni di ranking (così come NTILE()) offre un modo diverso per classificare i record in SQL Server.
In questo esercizio, vogliamo capire con quale frequenza compare il tipo di incidente 3 nel nostro insieme di dati. Vogliamo classificare il numero di incidenti in ordine decrescente, in modo che la data con il numero più alto di incidenti abbia row number, rank e dense rank pari a 1, e così via. Per rendere il tutto più chiaro, includeremo solo le date con almeno 8 incidenti.
Questo esercizio fa parte del corso
Analisi delle serie temporali in SQL Server
Istruzioni dell'esercizio
- Compila ciascuna funzione di finestra in base all'alias di colonna. Dovresti includere
ROW_NUMBER(),RANK()eDENSE_RANK()una sola volta ciascuna. - Completa la clausola
OVERordinando perir.NumberOfIncidentsin ordine decrescente.
esercizio interattivo pratico
Prova questo esercizio completando questo codice di esempio.
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;