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

Sådan tilføjes rangeringspositioner til rækker med DENSE_RANK() i SQL

Problem:

Du vil tilføje en rangeringsposition til rækker fortløbende, selvom rækkerne har de samme værdier.

Eksempel:

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

id fornavn efternavn score
11 John Thomas 345
14 Mary Johnson 222
16 Lisa Brun 154
23 Alan Blake 222
32 Chris Taylor 154

Lad os vise alle detaljer om elever:deres efternavn, fornavn og score sorteret efter score i faldende rækkefølge. Vi ønsker ikke at springe positionsnumre over, hvis nogle resultater er ens for mere end én elev.

Løsning 1:

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

Bemærk, at rangen varierer fra 1 til 3.

Diskussion:

Brug DENSE_RANK hvis du ikke vil springe rangeringspositioner over efter rækker med samme rang. I vores eksempel er positionen for Lisa 3, selvom Mary og Alan har samme rang 2.


  1. Sådan opretter du en tabel i dataarkvisning i Access 2016

  2. Tæl dage mellem to datoer, eksklusive weekender (kun MySQL)

  3. Opret ny tabel ved at vælge data fra andre tabeller med CREATE TABLE AS

  4. 25 Microsoft Access-genveje for at spare tid i tabeller i dataarkvisning