Porównanie ROW_NUMBER(), RANK() i DENSE_RANK()
Spośród funkcji okna służących do rankingowania najczęściej stosuje się ROW_NUMBER(), a następnie RANK() i DENSE_RANK(). Każda z tych funkcji (podobnie jak NTILE()) oferuje inny sposób nadawania rang rekordom w SQL Server.
W tym ćwiczeniu sprawdzimy, jak często w naszym zbiorze danych pojawia się typ zdarzenia 3. Chcemy uszeregować liczbę zdarzeń w kolejności malejącej – tak, aby data z największą liczbą zdarzeń otrzymała numer wiersza, rangę i gęstą rangę równą 1, i tak dalej. Dla uproszczenia uwzględnimy tylko daty z co najmniej 8 zdarzeniami.
To ćwiczenie jest częścią kursu
Analiza szeregów czasowych w SQL Server
Instrukcje do ćwiczenia
- Uzupełnij każdą funkcję okna zgodnie z aliasem kolumny. Użyj dokładnie raz każdej z funkcji:
ROW_NUMBER(),RANK()iDENSE_RANK(). - Wypełnij klauzulę
OVER, sortując wedługir.NumberOfIncidentsw kolejności malejącej.
Interaktywne ćwiczenie praktyczne
Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.
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;