Problema:
Você deseja classificar os registros pulando as posições de classificação após as linhas que têm a mesma classificação.
Exemplo:
Nosso banco de dados tem uma tabela chamada
championship
com dados nas seguintes colunas:id
(chave primária), user_name
e score
. id | user_name | pontuação |
111 | João | 12 |
112 | Maria | 23 |
115 | Lisa | 45 |
120 | Alan | 23 |
221 | Cris | 23 |
Vamos exibir os nomes de todos os usuários e suas pontuações classificadas em ordem decrescente e classificadas por pontuação.
Solução 1:
SELECT RANK() OVER(ORDER BY score DESC) AS rank_place, user_name, score FROM championship;
Essa consulta retorna a seguinte classificação:
rank_place | user_name | pontuação |
1 | Lisa | 45 |
2 | Maria | 23 |
2 | Alan | 23 |
2 | Cris | 23 |
5 | João | 12 |
Observe que o número da classificação é de 1 a 5, classificado por pontuação em ordem decrescente.
Discussão:
Use
RANK
se você quiser pular as posições de classificação após as linhas com a mesma classificação. Em nosso exemplo, Mary, Alan e Chris tiveram a mesma classificação de 2. A próxima posição elegível é 5 (calculada a partir de 2 + 3 linhas com a mesma classificação).