DENSE_RANK

Sintaxa agregatului

dense_rank_aggregate::=

Descrierea agregatului dens_rank_aggregate.gif urmează

Descrierea ilustrației dense_rank_aggregate.gif

Sintaxa Analitică

dense_rank_analytic::=

Descrierea lui dense_rank_analytic.gif urmează

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_RANKcalculează 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 din order_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 valorilor value_exprs din order_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