Apenas um alerta: Apesar do resultado do row_number neste caso em específico ser igual ao resultado da função rank, é incorreto dizer que a função row_number serve para gerar rankings. ele serve para gerar números sequenciais.
Apenas um alerta: Apesar do resultado do row_number neste caso em específico ser igual ao resultado da função rank, é incorreto dizer que a função row_number serve para gerar rankings. ele serve para gerar números sequenciais.
Oi, Lucas! Tudo bom?
Muito obrigado por trazer esse ponto, sua observação é muito pertinente! De fato, a função ROW_NUMBER()
gera números sequenciais únicos, respeitando a ordenação definida, e não deve ser confundida com uma função de ranqueamento no sentido estrito.
Apesar de, em alguns casos, ela gerar um resultado semelhante ao da função RANK()
, o comportamento é diferente principalmente quando há empates: enquanto RANK()
atribui a mesma posição a valores iguais, ROW_NUMBER()
sempre gera valores distintos e consecutivos.
Esse tipo de cuidado com os detalhes demonstra uma ótima evolução no entendimento do SQL. Se quiser se aprofundar mais sobre as diferenças entre ROW_NUMBER()
, RANK()
e DENSE_RANK()
, deixo uma sugestão aqui:
Sugestão de conteúdo para você mergulhar ainda mais sobre o tema:
Fico à disposição! E se precisar, conte sempre com o apoio do fórum.
Abraço e bons estudos!