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

So fügen Sie Rangpositionen von Zeilen in SQL mit RANK() hinzu

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).