Jämförelse av ROW_NUMBER(), RANK() och DENSE_RANK()
Bland rankningsfönsterfunktionerna är ROW_NUMBER() den vanligaste, följt av RANK() och DENSE_RANK(). Var och en av dessa rankningsfunktioner (liksom NTILE()) ger ett olika sätt att rangordna poster i SQL Server.
I den här övningen ska vi ta reda på hur ofta incidenttyp 3 förekommer i vår datamängd. Vi vill rangordna antalet incidenter i fallande ordning, så att datumet med flest incidenter får radnummer, rang och tät rang lika med 1, och så vidare. För att göra det lättare att följa inkluderar vi bara datum med minst 8 incidenter.
Den här övningen är en del av kursen
Tidsserieanalys i SQL Server
Övningsinstruktioner
- Fyll i varje fönsterfunktion utifrån kolumnaliaset. Du ska använda
ROW_NUMBER(),RANK()ochDENSE_RANK()exakt en gång vardera. - Fyll i
OVER-satsen med sortering påir.NumberOfIncidentsi fallande ordning.
Interaktiv övning med praktiskt arbete
Testa den här övningen genom att slutföra den här exempelkoden.
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;