DENSE_RANK
Aggregátum Szintaxis
dense_rank_aggregátum::=
Az illusztráció dense_rank_aggregate.gif leírása
Analitikus szintaxis
dense_rank_analitikus::=
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átumorder_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 aorder_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