Ícone do site CooperaTI

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.


➤ Conheça nosso programa de assinatura: https://cursos.bernardes.com.br/bexpert-cooperati


 

Sair da versão mobile