Database
 sql >> Datenbank >  >> RDS >> Database

So fügen Sie mit DENSE_RANK() in SQL Ranglistenpositionen zu Zeilen hinzu

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.