DENSE_RANK

Sintaxe agregada

dense_rank_aggregate::=

Descrição do dense_rank_aggregate.gif segue-se

Descrição da ilustração dense_rank_aggregate.gif

Sintaxe Analítica

dense_rank_analytic::=

Descrição da dense_rank_aggregate.gif segue

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 na order_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 do value_exprs no order_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