DENSE_RANK

Składnia agregatowa

dense_rank_aggregate::=

Opis ilustracji dense_rank_aggregate.gif follows

Opis ilustracji dense_rank_aggregate.gif

Składnia analityczna

dense_rank_analytic::=

Opis dense_rank_analytic.gif follows

Opis ilustracji dense_rank_analytic.gif

Zobacz także:

„Funkcje analityczne”, aby uzyskać informacje o składni, semantyce i ograniczeniach

Przeznaczenie

DENSE_RANK oblicza rangę wiersza w uporządkowanej grupie wierszy i zwraca rangę jako NUMBER. Rangi są kolejnymi liczbami całkowitymi zaczynającymi się od 1. Największą wartością rangi jest liczba unikalnych wartości zwróconych przez zapytanie. Wartości rang nie są pomijane w przypadku remisów. Wiersze z równymi wartościami kryteriów rankingowych otrzymują tę samą rangę. Funkcja ta jest przydatna do raportowania top-N i bottom-N.

Funkcja ta przyjmuje jako argumenty dowolny numeryczny typ danych i zwraca NUMBER.

  • Jako funkcja agregująca, DENSE_RANK oblicza gęstą rangę hipotetycznego wiersza identyfikowanego przez argumenty funkcji w odniesieniu do danej specyfikacji sortowania. Wszystkie argumenty funkcji muszą być wyrażeniami stałymi w każdej grupie agregatów, ponieważ identyfikują pojedynczy wiersz w każdej grupie. Stałe wyrażenia argumentów i wyrażenia w order_by_clause agregatu odpowiadają sobie według pozycji. Dlatego liczba argumentów musi być taka sama, a typy muszą być zgodne.

  • Jako funkcja analityczna, DENSE_RANK oblicza rangę każdego wiersza zwróconego z zapytania w odniesieniu do innych wierszy, na podstawie wartości value_exprs w order_by_clause.

Przykład zbiorczy

Następujący przykład oblicza rangę hipotetycznego pracownika z pensją 15 500 USD i prowizją 5% w przykładowej tabeli oe.employees:

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

Przykład analityczny

Następujące wyrażenie wybiera nazwę działu, nazwę pracownika i pensję wszystkich pracowników, którzy pracują w dziale zasobów ludzkich lub dziale zakupów, a następnie oblicza rangę dla każdej unikalnej pensji w każdym z dwóch działów. Wynagrodzenia, które są równe, otrzymują tę samą rangę. Porównaj ten przykład z przykładem dla 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