DENSE_RANK
Sintaxe agregada
dense_rank_aggregate::=
Descrição da ilustração dense_rank_aggregate.gif
Sintaxe Analítica
dense_rank_analytic::=
Descrição da ilustração dense_rank_analytic.gif
Veja também:
“Funções analíticas” para informações sobre sintaxe, semântica e restrições
Propósito
DENSE_RANK
calcula a classificação de uma linha em um grupo ordenado de linhas e retorna a classificação como um NUMBER
. Os rankings são inteiros consecutivos começando com 1. O maior valor de rank é o número de valores únicos retornados pela consulta. Os valores de Rank não são pulados no caso de empates. Linhas com valores iguais para o critério de classificação recebem a mesma classificação. Esta função é útil para relatórios top-N e bottom-N.
Esta função aceita como argumentos qualquer tipo de dado numérico e retorna NUMBER
.
-
Como uma função agregada,
DENSE_RANK
calcula a classificação densa de uma linha hipotética identificada pelos argumentos da função com respeito a uma determinada especificação de ordenação. Os argumentos da função devem todos avaliar a expressões constantes dentro de cada grupo agregado, pois identificam uma única linha dentro de cada grupo. As expressões de argumentos constantes e as expressões naorder_by_clause
da correspondência agregada por posição. Portanto, o número de argumentos deve ser o mesmo e os tipos devem ser compatíveis. -
Como uma função analítica,
DENSE_RANK
calcula a classificação de cada linha retornada de uma consulta em relação às outras linhas, com base nos valores dovalue_exprs
noorder_by_clause
.
Exemplo agregado
O exemplo seguinte calcula a classificação de um empregado hipotético com o salário de $15.500 e uma comissão de 5% na tabela de exemplo oe.employees
:
SELECT DENSE_RANK(15500, .05) WITHIN GROUP (ORDER BY salary DESC, commission_pct) "Dense Rank" FROM employees; Dense Rank------------------- 3
Exemplo analítico
A seguinte declaração seleciona o nome do departamento, nome do empregado e salário de todos os empregados que trabalham no departamento de recursos humanos ou compras, e então calcula uma classificação para cada salário único em cada um dos dois departamentos. Os salários que são iguais recebem a mesma classificação. Compare este exemplo com o exemplo para RANK.
SELECT d.department_name, e.last_name, e.salary, DENSE_RANK() OVER (PARTITION BY e.department_id ORDER BY e.salary) AS drank FROM employees e, departments d WHERE e.department_id = d.department_id AND d.department_id IN ('30', '40');DEPARTMENT_NAME LAST_NAME SALARY DRANK----------------------- ------------------ ---------- ----------Purchasing Colmenares 2500 1Purchasing Himuro 2600 2Purchasing Tobias 2800 3Purchasing Baida 2900 4Purchasing Khoo 3100 5Purchasing Raphaely 11000 6Human Resources Marvis 6500
Leave a Reply