Database
 sql >> база данни >  >> RDS >> Database

Как да добавяте позиции за класиране към редове с DENSE_RANK() в SQL

Проблем:

Искате да добавите позиция за класиране към редовете последователно, дори ако редовете имат еднакви стойности.

Пример:

Нашата база данни има таблица с име competition с данни в следните колони:id (първичен ключ), first_name , last_name и score .

id първо_име фамилно_име резултат
11 Джон Томас 345
14 Мери Джонсън 222
16 Лиза Кафяв 154
23 Алан Блейк 222
32 Крис Тейлър 154

Нека покажем всички подробности за учениците:тяхното фамилно име, собствено име и резултати, сортирани по score в низходящ ред. Не искаме да пропускаме номерата на позициите, ако някои резултати са еднакви за повече от един ученик.

Решение 1:

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

Обърнете внимание, че рангът варира от 1 до 3.

Дискусия:

Използвайте DENSE_RANK ако не искате да пропускате позиции в класирането след редове със същия ранг. В нашия пример, въпреки че Мери и Алън имат еднакъв ранг 2, позицията за Лиза е 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. Как да инсталирате pgAdmin 4 на Ubuntu 20.04/18.04/16.04

  2. Използване на съветника за откриване на метаданни

  3. SQL SELECT SUM

  4. Решения за читатели за предизвикателството на специалните острови

  5. Какво е T-SQL?