DENSE_RANK

Aggregate Syntaxe

dense_rank_aggregate::=

Popis dense_rank_aggregate.gif následuje

Popis obrázku dense_rank_aggregate.gif

Analytická syntaxe

dense_rank_analytic::=

Popis dense_rank_analytic.gif následuje

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 v order_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ě hodnot value_exprs v order_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