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.