Plenowindow functionranking
RANK, DENSE_RANK e ROW_NUMBER: as diferenças que caem em prova
Publicado em 2025-02-18
Pergunta
Qual a diferença prática entre RANK, DENSE_RANK e ROW_NUMBER quando há empates?
Explicação
Os três retornam um inteiro ordenado por partição. A diferença está no tratamento de empates: ROW_NUMBER nunca empata; RANK pula posições; DENSE_RANK mantém a sequência sem pular.
Query SQL
sql
SELECT
nome, pontos,
ROW_NUMBER() OVER (ORDER BY pontos DESC) AS rn,
RANK() OVER (ORDER BY pontos DESC) AS rk,
DENSE_RANK() OVER (ORDER BY pontos DESC) AS drk
FROM alunos;Resposta esperada
Para pontuações 100, 100, 90: ROW_NUMBER = 1,2,3 | RANK = 1,1,3 | DENSE_RANK = 1,1,2.
Erros comuns
- Usar ROW_NUMBER para podiums e ignorar empates legítimos
- Usar RANK para top-3 e devolver mais ou menos itens que o esperado
Dica de entrevista
Top-N sem empate → ROW_NUMBER. Top-N com empate aceito → DENSE_RANK.