A função Rank permite que façamos a avaliação de ranking sobre um resultado de uma query.
Por exemplo, criei uma estrutura em uma tabela que possui os campos: cdcliente, nmcliente e nrnota onde nrnota é um valor atribuído ao cliente que vai de 1 à 10, esse valor é atribuído através do ERP que classifica baseado em diversas métricas.
Se eu quiser consultar os meus clientes montando um rank do cliente com melhor pontuação para o cliente com a pontuação mais baixa eu posso utilizar uma query com order by veja o exemplo:
SELECT nmcliente, nrnota FROM cliente ORDER BY nrnota desc
É fácil perceber que os três primeiros registros estão entre os clientes com melhor pontuação, porém, se quisermos que esse resultado possua uma coluna indicando qual a posição do meu cliente no ranking, igual ao ranking de vencedores de uma competição de natação onde eu tenho o primeiro lugar, segundo e terceiro.
SELECT nmcliente, nrnota, RANK() OVER(order BY nrnota desc) FROM Cliente ORDER BY nrnota desc
Analise o resultado abaixo.
Na terceira coluna, utilizando a função rank eu criei a exibição do ranking dos meus clientes ordenados pelo cliente de maior pontuação para o cliente de menor.
Na próxima query eu vou retornar o top 3 dos meus clientes.
WITH RankCliente AS ( SELECT nmcliente, nrnota, RANK() OVER(order BY nrnota desc) AS ranking FROM Cliente) SELECT * FROM RankCliente WHERE ranking <= 3
Agora para dificultar um leitor do meu blog me enviou uma pergunta, como fazer ranking, porém o retorno ser em seqüência? A resposta é com o Dense_Rank veja o exemplo.
WITH RankCliente AS ( SELECT nmcliente, nrnota, DENSE_RANK() OVER(order BY nrnota desc) AS ranking FROM Cliente) SELECT * FROM RankCliente WHERE ranking <= 3
É fácil notar que o resultado da query a cima tem o mesmo filtro da enterior é o meu Top 3 de clientes, entretanto o retorno são 4 registros indicando os meus 4 clientes com melhor avaliação.
Pessoal era isso que eu tinha para falar sobre o Rank e o Dense_Rank, se ficaram algumas ou sugestões deixem seus comentários, ou enviem e-mails.
Abraço, Rodrigo.
levei tempo tentando achar uma solução para o que eu precisava, e isso vei a cair como uma luva, parabéns.
Opa Rudinei! Nossa este post é tão antigo, que bom que te ajudou. Abraço.