Porovnání funkcí ROW_NUMBER(), RANK() a DENSE_RANK()
Mezi okenními funkcemi pro řazení je nejčastěji používaná ROW_NUMBER(), následovaná funkcemi RANK() a DENSE_RANK(). Každá z těchto funkcí (stejně jako NTILE()) nabízí jiný způsob, jak řadit záznamy v SQL Serveru.
V tomto cvičení chceme zjistit, jak často se v naší datové sadě vyskytuje typ incidentu 3. Záznamy seřadíme podle počtu incidentů sestupně, takže datum s nejvyšším počtem incidentů bude mít pořadové číslo, rank i dense rank rovné 1. Pro přehlednost zobrazíme pouze data s alespoň 8 incidenty.
Toto cvičení je součástí kurzu
Time Series Analysis in SQL Server
Pokyny k cvičení
- Doplň jednotlivé okenní funkce podle aliasů sloupců. Každou z funkcí
ROW_NUMBER(),RANK()aDENSE_RANK()použij právě jednou. - Doplň klauzuli
OVERs řazením podleir.NumberOfIncidentsv sestupném pořadí.
Interaktivní cvičení na vyzkoušení si v praxi
Vyzkoušejte si toto cvičení dokončením tohoto ukázkového kódu.
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;