Zacznij terazZacznij za darmo

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

Zobacz kurs

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() i DENSE_RANK().
  • Wypełnij klauzulę OVER, sortując według ir.NumberOfIncidents w 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;
Edytuj i uruchom kod