DENSE_RANK

Aggregate Syntax

dense_rank_aggregate::=

Beschrijving van dense_rank_aggregate.gif volgt

Beschrijving van de illustratie dense_rank_aggregate.gif

Analytische syntaxis

dense_rank_analytic::=

Beschrijving van dense_rank_analytic.gif volgt

Beschrijving van de illustratie dense_rank_analytic.gif

Zie ook:

“Analytische functies” voor informatie over syntaxis, semantiek en restricties

Doel

DENSE_RANK berekent de rang van een rij in een geordende groep rijen en geeft de rang terug als een NUMBER. De rangen zijn opeenvolgende gehele getallen, beginnend met 1. De grootste rangwaarde is het aantal unieke waarden dat door de query wordt geretourneerd. Rang waarden worden niet overgeslagen in het geval van gelijke waarden. Rijen met gelijke waarden voor de rangschikkingscriteria krijgen dezelfde rang. Deze functie is nuttig voor top-N- en bottom-N-rapportage.

Deze functie accepteert als argumenten elk numeriek datatype en retourneert NUMBER.

  • Als een aggregatiefunctie berekent DENSE_RANK de dichte rang van een hypothetische rij die wordt geïdentificeerd door de argumenten van de functie met betrekking tot een gegeven sorteerspecificatie. De argumenten van de functie moeten allemaal evalueren naar constante uitdrukkingen binnen elke geaggregeerde groep, omdat ze een enkele rij binnen elke groep identificeren. De constante argumentuitdrukkingen en de uitdrukkingen in de order_by_clause van het aggregaat komen overeen op positie. Daarom moet het aantal argumenten gelijk zijn en moeten de typen compatibel zijn.

  • Als analytische functie berekent DENSE_RANK de rang van elke rij die uit een query wordt geretourneerd ten opzichte van de andere rijen, op basis van de waarden van de value_exprs in de order_by_clause.

Geaggregeerd voorbeeld

Het volgende voorbeeld berekent de rangorde van een hypothetische werknemer met een salaris van $15.500 en een provisie van 5% in de voorbeeldtabel oe.employees:

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

Analytisch voorbeeld

De volgende instructie selecteert de naam van de afdeling, de naam van de werknemer en het salaris van alle werknemers die op de afdeling Personeelszaken of de afdeling Inkoop werken, en berekent vervolgens een rangorde voor elk uniek salaris in elk van de twee afdelingen. De salarissen die gelijk zijn krijgen dezelfde rang. Vergelijk dit voorbeeld met het voorbeeld voor 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