Problem:
Sie möchten Zeilen nacheinander eine Rangposition hinzufügen, auch wenn die Zeilen die gleichen Werte haben.
Beispiel:
Unsere Datenbank hat eine Tabelle namens competition
mit Daten in den folgenden Spalten:id
(Primärschlüssel), first_name
, last_name
, und score
.
id | Vorname | Nachname | Ergebnis |
11 | Johannes | Thomas | 345 |
14 | Maria | Johnson | 222 |
16 | Lisa | Braun | 154 |
23 | Alan | Blake | 222 |
32 | Christian | Taylor | 154 |
Lassen Sie uns alle Details zu Schülern anzeigen:ihren Nachnamen, Vornamen und ihre Ergebnisse, sortiert nach score
in absteigender Reihenfolge. Wir möchten Positionsnummern nicht überspringen, wenn einige Ergebnisse für mehr als einen Schüler gleich sind.
Lösung 1:
SELECT DENSE_RANK() OVER(ORDER BY score DESC) AS d_rank, first_name, last_name, score FROM competition;
Beachten Sie, dass der Rang von 1 bis 3 reicht.
Diskussion:
Verwenden Sie DENSE_RANK
wenn Sie Ranglistenpositionen nach Zeilen mit demselben Rang nicht überspringen möchten. Obwohl Mary und Alan in unserem Beispiel den gleichen Rang von 2 haben, ist die Position für Lisa 3.