DENSE_RANK
Aggregat Syntax
Dense_rank_aggregate::=
Beskrivning av illustrationen dense_rank_aggregate.gif
Analytisk syntax
dense_rank_analytic::=
Beskrivning av illustrationen dense_rank_analytic.gif
Se även:
”Analytiska funktioner” för information om syntax, semantik och begränsningar
Syfte
DENSE_RANK
beräknar rangordningen för en rad i en ordnad grupp av rader och returnerar rangordningen som en NUMBER
. Rangerna är på varandra följande heltal som börjar med 1. Det största rangvärdet är antalet unika värden som returneras av förfrågan. Rangvärdena överhoppas inte i händelse av oavgjorda resultat. Rader med samma värden för rangordningskriterierna får samma rangordning. Den här funktionen är användbar för top-N- och bottom-N-rapportering.
Den här funktionen tar emot alla numeriska datatyper som argument och returnerar NUMBER
.
-
Som en aggregerad funktion beräknar
DENSE_RANK
den täta rangordningen för en hypotetisk rad som identifieras av funktionens argument med avseende på en given sorteringsspecifikation. Funktionens argument måste alla utvärderas till konstanta uttryck inom varje aggregatgrupp, eftersom de identifierar en enda rad inom varje grupp. De konstanta argumentuttrycken och uttrycken iorder_by_clause
i aggregatet matchar varandra genom position. Därför måste antalet argument vara detsamma och typerna måste vara kompatibla. -
Som analytisk funktion beräknar
DENSE_RANK
rangordningen för varje rad som returneras från en fråga med avseende på de andra raderna, baserat på värdena förvalue_exprs
iorder_by_clause
.
Aggregeringsexempel
Följande exempel beräknar rangordningen för en hypotetisk anställd med lönen 15 500 dollar och en provision på 5 % i provtabellen oe.employees
:
SELECT DENSE_RANK(15500, .05) WITHIN GROUP (ORDER BY salary DESC, commission_pct) "Dense Rank" FROM employees; Dense Rank------------------- 3
Analytiskt exempel
Följande anvisning väljer avdelningsnamn, anställningsnamn och lön för alla anställda som arbetar på personalavdelningen eller inköpsavdelningen, och beräknar sedan en rangordning för varje unik lön i var och en av de två avdelningarna. De löner som är lika får samma rang. Jämför det här exemplet med exemplet 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