DENSE_RANK

Aggregat Syntax

Dense_rank_aggregate::=

Beskrivning av dense_rank_aggregate.gif följer

Beskrivning av illustrationen dense_rank_aggregate.gif

Analytisk syntax

dense_rank_analytic::=

Beskrivning av dense_rank_analytic.gif följer

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 i order_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ör value_exprs i order_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