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).