DENSE_RANK

Syntaxe agrégative

dense_rank_aggregate::=

Description de dense_rank_aggregate.gif suit

Description de l’illustration dense_rank_aggregate.gif

Syntaxe analytique

dense_rank_analytic::=

Description de dense_rank_analytic.gif suit

Description de l’illustration dense_rank_analytic.gif

See Also:

« Fonctions analytiques » pour des informations sur la syntaxe, la sémantique et les restrictions

Purpose

DENSE_RANK calcule le rang d’une ligne dans un groupe ordonné de lignes et renvoie le rang comme un NUMBER. Les rangs sont des entiers consécutifs commençant par 1. La plus grande valeur de rang correspond au nombre de valeurs uniques retournées par la requête. Les valeurs de rang ne sont pas sautées en cas d’égalité. Les rangs ayant des valeurs égales pour les critères de classement reçoivent le même rang. Cette fonction est utile pour les rapports top-N et bottom-N.

Cette fonction accepte comme arguments tout type de données numériques et renvoie NUMBER.

  • En tant que fonction agrégée, DENSE_RANK calcule le rang dense d’une ligne hypothétique identifiée par les arguments de la fonction par rapport à une spécification de tri donnée. Les arguments de la fonction doivent tous être évalués à des expressions constantes dans chaque groupe d’agrégats, car ils identifient une seule ligne dans chaque groupe. Les expressions constantes des arguments et les expressions dans le order_by_clause de l’agrégat correspondent par position. Par conséquent, le nombre d’arguments doit être le même et les types doivent être compatibles.

  • En tant que fonction analytique, DENSE_RANK calcule le rang de chaque ligne retournée par une requête par rapport aux autres lignes, en fonction des valeurs des value_exprs dans le order_by_clause.

Exemple agrégé

L’exemple suivant calcule le rang d’un employé hypothétique avec le salaire de 15 500 $ et une commission de 5 % dans la table échantillon oe.employees:

SELECT DENSE_RANK(15500, .05) WITHIN GROUP (ORDER BY salary DESC, commission_pct) "Dense Rank" FROM employees; Dense Rank------------------- 3

Exemple analytique

L’instruction suivante sélectionne le nom du département, le nom de l’employé et le salaire de tous les employés qui travaillent dans le département des ressources humaines ou des achats, puis calcule un rang pour chaque salaire unique dans chacun des deux départements. Les salaires qui sont égaux reçoivent le même rang. Comparez cet exemple avec l’exemple de 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