Database
 sql >> Baza danych >  >> RDS >> Database

Jak dodać pozycje rankingowe do wierszy za pomocą DENSE_RANK() w SQL?

Problem:

Chcesz dodać pozycję rankingową do wierszy kolejno, nawet jeśli wiersze mają te same wartości.

Przykład:

Nasza baza danych zawiera tabelę o nazwie competition z danymi w następujących kolumnach:id (klucz podstawowy), first_name , last_name i score .

id imię nazwisko wynik
11 Jan Thomas 345
14 Maryi Johnson 222
16 Lisa Brązowy 154
23 Alan Blake 222
32 Chrystusa Taylor 154

Wyświetlmy wszystkie szczegóły dotyczące uczniów:ich nazwisko, imię i wyniki posortowane według score w kolejności malejącej. Nie chcemy pomijać numerów pozycji, jeśli niektóre wyniki są takie same dla więcej niż jednego ucznia.

Rozwiązanie 1:

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

Zauważ, że ranga wynosi od 1 do 3.

Dyskusja:

Użyj DENSE_RANK jeśli nie chcesz pomijać pozycji rankingowych po wierszach o tej samej pozycji. W naszym przykładzie, mimo że Mary i Alan mają tę samą rangę 2, pozycja Lisy to 3.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Używanie kroku Unpivot do tworzenia tabeli tabelarycznej z tabeli przestawnej

  2. Generuj zestaw lub sekwencję bez pętli – część 1

  3. Podstawy wyrażeń tabelowych, Część 9 – Widoki w porównaniu z tabelami pochodnymi i CTE

  4. Kolejny sposób przeglądania automatycznych aktualizacji statystyk

  5. Sterownik ODBC Google BigQuery