DENSE_RANK

Aggregate Syntax

dense_rank_aggregate::=

Beschreibung von dense_rank_aggregate.gif folgt

Beschreibung der Abbildung dense_rank_aggregate.gif

Analytische Syntax

dense_rank_analytic::=

Beschreibung von dense_rank_analytic.gif folgt

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 NUMBERzurück.

  • Als Aggregatfunktion berechnet DENSE_RANKden 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 der order_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 der value_exprs im order_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