LoslegenKostenlos loslegen

ROW_NUMBER(), RANK() und DENSE_RANK() im Vergleich

Unter den Ranking-Window-Funktionen ist ROW_NUMBER() am gebräuchlichsten, gefolgt von RANK() und DENSE_RANK(). Jede dieser Ranking-Funktionen (ebenso wie NTILE()) bietet uns eine andere Möglichkeit, Datensätze in SQL Server zu bewerten.

In dieser Übung möchten wir ermitteln, wie häufig der Incident-Typ 3 in unserem Datensatz vorkommt. Wir wollen die Anzahl der Incidents in absteigender Reihenfolge ranken, sodass das Datum mit der höchsten Anzahl an Incidents die Zeilennummer, den Rang und den dichten Rang 1 erhält – und so weiter. Damit es leichter nachzuvollziehen ist, nehmen wir nur Daten mit mindestens 8 Incidents auf.

Diese Übung ist Teil des Kurses

Zeitreihenanalyse in SQL Server

Kurs anzeigen

Anleitung zur Übung

  • Fülle jede Window-Funktion passend zum Spaltenalias aus. Du solltest ROW_NUMBER(), RANK() und DENSE_RANK() jeweils genau einmal verwenden.
  • Ergänze die OVER-Klausel mit einer Sortierung nach ir.NumberOfIncidents in absteigender Reihenfolge.

Interaktive Übung

Vervollständige den Beispielcode, um diese Übung erfolgreich abzuschließen.

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;
Code bearbeiten und ausführen