DENSE_RANK

Aggregátum Szintaxis

dense_rank_aggregátum::=

A dense_rank_aggregátum leírása.gif következik

Az illusztráció dense_rank_aggregate.gif leírása

Analitikus szintaxis

dense_rank_analitikus::=

A dense_rank_analitikus leírása.gif következik

A dense_rank_analytic.gif

See Also:

“Analytic Functions” for information on syntax, semantics, and restrictions

Purpose

DENSE_RANK computes the rank of a row in a ordered group of rows and returns the rank as a NUMBER. A rangok egymást követő egész számok, amelyek 1-gyel kezdődnek. A legnagyobb rangérték a lekérdezés által visszaadott egyedi értékek száma. A rangértékek döntetlenek esetén nem maradnak ki. Azok a sorok, amelyek a rangsorolási kritériumok tekintetében azonos értékeket kapnak, ugyanazt a rangsort kapják. Ez a függvény hasznos a top-N és bottom-N jelentésekhez.

Ez a függvény argumentumként bármilyen numerikus adattípust elfogad, és NUMBER-t ad vissza.

  • Az DENSE_RANK mint aggregált függvény kiszámítja a függvény argumentumai által azonosított hipotetikus sor sűrű rangját egy adott rendezési specifikáció tekintetében. A függvény argumentumainak mindegyik aggregátumcsoporton belül konstans kifejezésekre kell kiértékelődniük, mivel minden csoporton belül egyetlen sort azonosítanak. A konstans argumentumkifejezések és az aggregátum order_by_clause kifejezései pozíció szerint megegyeznek. Ezért az argumentumok számának azonosnak kell lennie, és a típusoknak kompatibilisnek kell lenniük.

  • A DENSE_RANK analitikus függvényként a order_by_clause-ban lévő value_exprs értékei alapján kiszámítja a lekérdezésből visszaadott minden egyes sor rangsorát a többi sorhoz képest.

Az összesített példa

A következő példa kiszámítja egy hipotetikus alkalmazott rangsorát, akinek a fizetése 15 500 $ és jutaléka 5% a oe.employees mintatáblában:

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

Analitikus példa

A következő utasítás kiválasztja az osztály nevét, az alkalmazott nevét és az összes olyan alkalmazott fizetését, aki a humánerőforrás vagy a beszerzési osztályon dolgozik, majd kiszámítja a két osztályon belüli minden egyes egyedi fizetés rangsorát. Az azonos fizetések azonos rangot kapnak. Hasonlítsa össze ezt a példát a 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 

példával.

Leave a Reply