Problem:
Sie möchten Datensätze ordnen, indem Sie Ranglistenpositionen nach Zeilen mit demselben Rang überspringen.
Beispiel:
Unsere Datenbank hat eine Tabelle namens championship
mit Daten in den folgenden Spalten:id
(Primärschlüssel), user_name
, und score
.
id | Benutzername | Ergebnis |
111 | Johannes | 12 |
112 | Maria | 23 |
115 | Lisa | 45 |
120 | Alan | 23 |
221 | Christian | 23 |
Lassen Sie uns die Namen aller Benutzer und ihre Punktzahlen in absteigender Reihenfolge und nach Punktzahl geordnet anzeigen.
Lösung 1:
SELECT RANK() OVER(ORDER BY score DESC) AS rank_place, user_name, score FROM championship;
Diese Abfrage gibt die folgende Rangfolge zurück:
rank_place | Benutzername | Ergebnis |
1 | Lisa | 45 |
2 | Maria | 23 |
2 | Alan | 23 |
2 | Christian | 23 |
5 | Johannes | 12 |
Beachten Sie, dass die Rangnummer von 1 bis 5 reicht, sortiert nach Punktzahl in absteigender Reihenfolge.
Diskussion:
Verwenden Sie RANK
wenn Sie Ranglistenplätze nach Reihen mit gleichem Rang überspringen möchten. In unserem Beispiel hatten Mary, Alan und Chris alle denselben Rang von 2. Die nächste zulässige Position ist 5 (berechnet aus 2 + 3 Zeilen mit demselben Rang).