Database
 sql >> Base de Dados >  >> RDS >> Database

Como adicionar posições de classificação a linhas com DENSE_RANK() no SQL

Problema:


Você deseja adicionar uma posição de classificação às linhas consecutivamente, mesmo que as linhas tenham os mesmos valores.

Exemplo:


Nosso banco de dados tem uma tabela chamada competition com dados nas seguintes colunas:id (chave primária), first_name , last_name e score .
id nome_nome sobrenome pontuação
11 João Thomas 345
14 Maria Johnson 222
16 Lisa Marrom 154
23 Alan Blake 222
32 Cris Taylor 154

Vamos exibir todos os detalhes sobre os alunos:o sobrenome, o nome e as pontuações classificadas por score por ordem decrescente. Não queremos pular números de posição se algumas pontuações forem as mesmas para mais de um aluno.

Solução 1:

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

Observe que a classificação varia de 1 a 3.

Discussão:


Use DENSE_RANK se você não quiser pular posições de classificação após linhas com a mesma classificação. Em nosso exemplo, embora Mary e Alan tenham a mesma classificação de 2, a posição de Lisa é 3.