DENSE_RANK
Aggregate Syntaxe
dense_rank_aggregate::=
Popis obrázku dense_rank_aggregate.gif
Analytická syntaxe
dense_rank_analytic::=
Popis obrázku dense_rank_analytic.gif
Viz také:
„Analytické funkce“ pro informace o syntaxi, sémantice a omezeních
Účel
DENSE_RANK
vypočítá pořadí řádku v uspořádané skupině řádků a vrátí pořadí jako NUMBER
. Hodnosti jsou po sobě jdoucí celá čísla začínající číslem 1. Největší hodnota hodnosti je počet jedinečných hodnot vrácených dotazem. Hodnoty hodností se v případě remíz nepřeskakují. Řádky se stejnými hodnotami kritérií pořadí obdrží stejné pořadí. Tato funkce je užitečná pro hlášení top-N a bottom-N.
Tato funkce přijímá jako argumenty libovolný číselný datový typ a vrací NUMBER
.
-
Jako agregační funkce
DENSE_RANK
vypočítá hustou hodnost hypotetického řádku identifikovaného argumenty funkce vzhledem k dané specifikaci třídění. Všechny argumenty funkce se musí vyhodnotit jako konstantní výrazy v rámci každé agregační skupiny, protože identifikují jeden řádek v rámci každé skupiny. Konstantní výrazy argumentů a výrazy vorder_by_clause
agregátu se shodují podle pozice. Proto musí být počet argumentů stejný a typy musí být kompatibilní. -
Jako analytická funkce
DENSE_RANK
vypočítá pořadí každého řádku vráceného z dotazu vzhledem k ostatním řádkům na základě hodnotvalue_exprs
vorder_by_clause
.
Agregovaný příklad
Následující příklad vypočítá pořadí hypotetického zaměstnance s platem 15 500 USD a provizí 5 % ve vzorové tabulce oe.employees
:
SELECT DENSE_RANK(15500, .05) WITHIN GROUP (ORDER BY salary DESC, commission_pct) "Dense Rank" FROM employees; Dense Rank------------------- 3
Analytický příklad
Následující příkaz vybere název oddělení, jméno zaměstnance a plat všech zaměstnanců, kteří pracují v oddělení lidských zdrojů nebo nákupu, a poté vypočítá pořadí pro každý jedinečný plat v každém z obou oddělení. Platy, které jsou stejné, obdrží stejnou hodnost. Porovnejte tento příklad s příkladem pro 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