Quando precisamos criar um ranque dos valores na minha consulta, por onde começar?


Existem consultas que precisamos informar uma posição dos valores retornados da consulta. Para esses casos vamos aprender a criar um ranque dessas informações.
A função Rank trabalha em conjunto com a clausula Order By, a fim de gerar uma classificação baseada na própria expressão do Order By.
No Exemplo abaixo vou lista os funcionários na mesma ordem de inserção, para isso utilizo a função RowNum.

SELECT NOME, SALARIO, ROWNUM
FROM FUNCIONARIO

Agora vamos criar o ranque dos valores, e perceba que a posição inicial será alterada.
SELECT NOME, SALARIO, RANK() OVER (ORDER BY SALARIO) AS RANK_SAL
FROM FUNCIONARIO
ORDER BY SALARIO

Perceba que os valores estão ordenados e na coluna RANK_SAL, podemos notar esse ranque que foi listado. Porém, percebemos que depois da posição 3 passa para a posição 5, isso acontece por que quando temos duas linhas com o mesmo valor a próxima posição não é atualizada, deixando assim na ordem da posição da linha. Para resolver esse problema, podemos utilizar uma outra função analítica do Oracle a Dense_Rank.
Segue o exemplo abaixo como ficaria:
SELECT NOME, SALARIO, DENSE_RANK() OVER (ORDER BY SALARIO) AS DENSE_RANK_SAL
FROM FUNCIONARIO
ORDER BY SALARIO

Percebemos que agora depois da posição 3 vem a 4 como deveria ser.
Espero que essas funções possam ajudar no seu dia a dia.
Abraços.

Share

    Comments

    1. Prefeito. Código simples e bem eficaz, obrigado pela dica.

    2. Dica de Mestre.
      Muito valido para implementação em relatórios.
      Grande Abraço,
      Emerson

    Deixe um comentário

    O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

    © 2019 All Rights Reserved. Cooperati. 

    %d blogueiros gostam disto: