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.