sql >> Databasteknik >  >> RDS >> Database

Hur man lägger till rankningspositioner till rader med DENSE_RANK() i SQL

Problem:

Du vill lägga till en rankningsposition till rader i följd, även om raderna har samma värden.

Exempel:

Vår databas har en tabell som heter competition med data i följande kolumner:id (primär nyckel), first_name , last_name och score .

id förnamn efternamn poäng
11 John Thomas 345
14 Maria Johnson 222
16 Lisa Brun 154
23 Alan Blake 222
32 Chris Taylor 154

Låt oss visa all information om eleverna:deras efternamn, förnamn och poäng sorterade efter score i fallande ordning. Vi vill inte hoppa över positionsnummer om vissa poäng är desamma för mer än en elev.

Lösning 1:

SELECT DENSE_RANK() OVER(ORDER BY score DESC) AS d_rank,
  first_name,
  last_name,
  score
FROM competition;

Lägg märke till att rangen varierar från 1 till 3.

Diskussion:

Använd DENSE_RANK om du inte vill hoppa över rankningspositioner efter rader med samma rankning. I vårt exempel, även om Mary och Alan har samma rang 2, är positionen för Lisa 3.


  1. Utforska de olika sätten att kryptera dina MariaDB-data

  2. n:te percentilberäkningar i postgresql

  3. Hur BIN() fungerar i MariaDB

  4. Olika värden räknas i samma kolumn