sql >> Database >  >> RDS >> Database

Hoe rangschikkingsposities aan rijen toe te voegen met DENSE_RANK() in SQL

Probleem:

U wilt een rangschikkingspositie toevoegen aan rijen opeenvolgend, zelfs als de rijen dezelfde waarden hebben.

Voorbeeld:

Onze database heeft een tabel met de naam competition met gegevens in de volgende kolommen:id (primaire sleutel), first_name , last_name , en score .

id voornaam achternaam score
11 Jan Thomas 345
14 Maria Johnson 222
16 Lisa Bruin 154
23 Alan Blake 222
32 Chris Taylor 154

Laten we alle details over studenten weergeven:hun achternaam, voornaam en scores gesorteerd op score in aflopende volgorde. We willen positienummers niet overslaan als sommige scores voor meer dan één leerling hetzelfde zijn.

Oplossing 1:

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

Merk op dat de rangorde varieert van 1 tot 3.

Discussie:

Gebruik DENSE_RANK als u geen rangordeposities wilt overslaan na rijen met dezelfde rangorde. In ons voorbeeld, hoewel Mary en Alan dezelfde rang 2 hebben, is de positie voor Lisa 3.


  1. Een SQL Server Agent-taak maken met SSMS

  2. in SQLite

  3. Is er een reden om je zorgen te maken over de kolomvolgorde in een tabel?

  4. Waarde verhogen in MySQL-updatequery