DENSE_RANK
Syntaxe agrégative
dense_rank_aggregate::=
Description de l’illustration dense_rank_aggregate.gif
Syntaxe analytique
dense_rank_analytic::=
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 leorder_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 desvalue_exprs
dans leorder_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