sql >> Database teknologi >  >> RDS >> Database

Sådan tilføjer du rangordnede positioner af rækker i SQL med RANK()

Problem:

Du vil rangere poster ved at springe rangeringspositioner over efter rækker, der har samme rangering.

Eksempel:

Vores database har en tabel ved navn championship med data i følgende kolonner:id (primær nøgle), user_name , og score .

id brugernavn score
111 John 12
112 Mary 23
115 Lisa 45
120 Alan 23
221 Chris 23

Lad os vise alle brugeres navne og deres score sorteret i faldende rækkefølge og rangeret efter score.

Løsning 1:

SELECT RANK() OVER(ORDER BY score DESC) AS rank_place,
  user_name,
  score
FROM championship;

Denne forespørgsel returnerer følgende rangering:

rank_place brugernavn score
1 Lisa 45
2 Mary 23
2 Alan 23
2 Chris 23
5 John 12

Bemærk, at rangnummeret er fra 1 til 5, sorteret efter score i faldende rækkefølge.

Diskussion:

Brug RANK hvis du vil springe rangeringspositioner over efter rækker med samme rang. I vores eksempel havde Mary, Alan og Chris alle den samme placering på 2. Den næste kvalificerede placering er 5 (beregnet ud fra 2 + 3 rækker med samme rang).


  1. 2 måder at vise alle databaser i PostgreSQL (psql)

  2. Sådan fejlfindes MySQL-databaseproblemer

  3. Hvordan dybkopierer jeg et sæt data og ændrer FK-referencer til at pege på alle kopierne?

  4. "Kan ikke slippe triggeren"-fejl, når du forsøger at slippe en logon-trigger? Prøv dette.