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
Anleitung zur Übung
- Fülle jede Window-Funktion passend zum Spaltenalias aus. Du solltest
ROW_NUMBER(),RANK()undDENSE_RANK()jeweils genau einmal verwenden. - Ergänze die
OVER-Klausel mit einer Sortierung nachir.NumberOfIncidentsin 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;