DENSE_RANK
Sintaxa agregatului
dense_rank_aggregate::=
Descrierea ilustrației dense_rank_aggregate.gif
Sintaxa Analitică
dense_rank_analytic::=
Descrierea ilustrației dense_rank_analytic.gif
Vezi și:
„Funcții analitice” pentru informații despre sintaxă, semantică și restricții
Scop
DENSE_RANK
calculează rangul unui rând într-un grup ordonat de rânduri și returnează rangul sub forma unui NUMBER
. Rangurile sunt numere întregi consecutive care încep cu 1. Cea mai mare valoare a rangului este numărul de valori unice returnate de interogare. Valorile de rang nu sunt omise în caz de egalitate. Rândurile cu valori egale pentru criteriile de clasificare primesc același rang. Această funcție este utilă pentru raportarea top-N și bottom-N.
Această funcție acceptă ca argumente orice tip de date numerice și returnează NUMBER
.
-
Ca funcție de agregare,
DENSE_RANK
calculează rangul dens al unui rând ipotetic identificat de argumentele funcției în raport cu o anumită specificație de sortare. Argumentele funcției trebuie să se evalueze toate ca expresii constante în cadrul fiecărui grup de agregare, deoarece acestea identifică un singur rând în cadrul fiecărui grup. Expresiile constante ale argumentelor și expresiile dinorder_by_clause
ale agregatului se potrivesc după poziție. Prin urmare, numărul de argumente trebuie să fie același, iar tipurile trebuie să fie compatibile. -
Ca funcție analitică,
DENSE_RANK
calculează rangul fiecărui rând returnat dintr-o interogare în raport cu celelalte rânduri, pe baza valorilorvalue_exprs
dinorder_by_clause
.
Exemplu de agregare
Exemplul următor calculează rangul unui angajat ipotetic cu salariul de 15.500 $ și un comision de 5% în tabelul de eșantionare oe.employees
:
SELECT DENSE_RANK(15500, .05) WITHIN GROUP (ORDER BY salary DESC, commission_pct) "Dense Rank" FROM employees; Dense Rank------------------- 3
Exemplu analitic
Exemplul următor selectează numele departamentului, numele angajatului și salariul tuturor angajaților care lucrează în departamentul de resurse umane sau în cel de achiziții, apoi calculează un rang pentru fiecare salariu unic în fiecare dintre cele două departamente. Salariile care sunt egale primesc același rang. Comparați acest exemplu cu exemplul pentru 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