sql >> Database >  >> RDS >> Database

Hoe rangschikkingsposities van rijen in SQL toe te voegen met RANK()

Probleem:

U wilt records rangschikken door rangschikkingsposities over te slaan na rijen met dezelfde rangorde.

Voorbeeld:

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

id gebruikersnaam score
111 Jan 12
112 Maria 23
115 Lisa 45
120 Alan 23
221 Chris 23

Laten we de namen van alle gebruikers en hun scores weergeven, gesorteerd in aflopende volgorde en gerangschikt op score.

Oplossing 1:

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

Deze zoekopdracht levert de volgende rangorde op:

rank_place gebruikersnaam score
1 Lisa 45
2 Maria 23
2 Alan 23
2 Chris 23
5 Jan 12

Merk op dat het rangnummer van 1 tot 5 is, gesorteerd op score in aflopende volgorde.

Discussie:

Gebruik RANK als u rangschikkingsposities wilt overslaan na rijen met dezelfde rangorde. In ons voorbeeld hadden Mary, Alan en Chris allemaal dezelfde rangorde van 2. De volgende in aanmerking komende positie is 5 (berekend uit 2 + 3 rijen met dezelfde rangorde).


  1. Verbinding maken met een database met behulp van PHP

  2. Een datetime-kolom in SQL Server nodig die automatisch wordt bijgewerkt wanneer de record wordt gewijzigd

  3. Retourneer alle externe sleutels en CONTROLEER-beperkingen in een SQL Server-database (T-SQL-voorbeelden)

  4. JSON ontleden in TSQL