DENSE_RANK
Aggregate Syntax
dense_rank_aggregate::=
Beschreibung der Abbildung dense_rank_aggregate.gif
Analytische Syntax
dense_rank_analytic::=
Beschreibung der Abbildung dense_rank_analytic.gif
Siehe auch:
„Analytische Funktionen“ für Informationen über Syntax, Semantik und Einschränkungen
Zweck
DENSE_RANK
Berechnet den Rang einer Zeile in einer geordneten Gruppe von Zeilen und gibt den Rang als NUMBER
zurück. Die Ränge sind aufeinanderfolgende Ganzzahlen, beginnend mit 1. Der größte Rangwert ist die Anzahl der eindeutigen Werte, die von der Abfrage zurückgegeben werden. Rangwerte werden bei Gleichstand nicht übersprungen. Zeilen mit gleichen Werten für die Rangfolgekriterien erhalten denselben Rang. Diese Funktion ist nützlich für Top-N- und Bottom-N-Berichte.
Diese Funktion akzeptiert als Argumente einen beliebigen numerischen Datentyp und gibt NUMBER
zurück.
-
Als Aggregatfunktion berechnet
DENSE_RANK
den dichten Rang einer hypothetischen Zeile, die durch die Argumente der Funktion identifiziert wird, in Bezug auf eine gegebene Sortierspezifikation. Die Argumente der Funktion müssen alle zu konstanten Ausdrücken innerhalb jeder Aggregatgruppe evaluiert werden, da sie eine einzelne Zeile innerhalb jeder Gruppe identifizieren. Die Ausdrücke der konstanten Argumente und die Ausdrücke in derorder_by_clause
des Aggregats stimmen nach Position überein. Daher muss die Anzahl der Argumente gleich sein und die Typen müssen kompatibel sein. -
Als analytische Funktion berechnet
DENSE_RANK
den Rang jeder von einer Abfrage zurückgegebenen Zeile in Bezug auf die anderen Zeilen, basierend auf den Werten dervalue_exprs
imorder_by_clause
.
Aggregat-Beispiel
Das folgende Beispiel berechnet den Rang eines hypothetischen Mitarbeiters mit einem Gehalt von 15.500 $ und einer Provision von 5 % in der Beispieltabelle oe.employees
:
SELECT DENSE_RANK(15500, .05) WITHIN GROUP (ORDER BY salary DESC, commission_pct) "Dense Rank" FROM employees; Dense Rank------------------- 3
Analytisches Beispiel
Die folgende Anweisung wählt den Abteilungsnamen, den Mitarbeiternamen und das Gehalt aller Mitarbeiter aus, die in der Personal- oder Einkaufsabteilung arbeiten, und berechnet dann einen Rang für jedes eindeutige Gehalt in jeder der beiden Abteilungen. Die Gehälter, die gleich sind, erhalten denselben Rang. Vergleichen Sie dieses Beispiel mit dem Beispiel für 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