DENSE_RANK
Sintassi aggregata
dense_rank_aggregate::=
Descrizione dell’illustrazione dense_rank_aggregate.gif
Sintassi analitica
dense_rank_analytic::=
Descrizione dell’illustrazione dense_rank_analytic.gif
Vedi anche:
“Funzioni analitiche” per informazioni su sintassi, semantica e restrizioni
Scopo
DENSE_RANK
calcola il grado di una riga in un gruppo ordinato di righe e restituisce il grado come NUMBER
. I ranghi sono interi consecutivi che iniziano con 1. Il valore di rango più grande è il numero di valori unici restituiti dalla query. I valori di rango non vengono saltati in caso di parità. Le righe con valori uguali per i criteri di classificazione ricevono lo stesso rango. Questa funzione è utile per la segnalazione top-N e bottom-N.
Questa funzione accetta come argomenti qualsiasi tipo di dato numerico e restituisce NUMBER
.
-
Come funzione aggregata,
DENSE_RANK
calcola il rango denso di una riga ipotetica identificata dagli argomenti della funzione rispetto a una determinata specifica di ordinamento. Gli argomenti della funzione devono essere tutti valutati come espressioni costanti all’interno di ogni gruppo aggregato, perché identificano una singola riga all’interno di ogni gruppo. Le espressioni degli argomenti costanti e le espressioni nelorder_by_clause
dell’aggregato corrispondono per posizione. Pertanto, il numero di argomenti deve essere lo stesso e i tipi devono essere compatibili. -
Come funzione analitica,
DENSE_RANK
calcola il rango di ogni riga restituita da una query rispetto alle altre righe, in base ai valori deivalue_exprs
nelorder_by_clause
.
Esempio aggregato
Il seguente esempio calcola la classifica di un ipotetico impiegato con uno stipendio di 15.500 dollari e una commissione del 5% nella tabella di esempio oe.employees
:
SELECT DENSE_RANK(15500, .05) WITHIN GROUP (ORDER BY salary DESC, commission_pct) "Dense Rank" FROM employees; Dense Rank------------------- 3
Esempio analitico
La seguente dichiarazione seleziona il nome del dipartimento, il nome dell’impiegato e lo stipendio di tutti gli impiegati che lavorano nelle risorse umane o nell’ufficio acquisti, e poi calcola una classifica per ogni stipendio unico in ciascuno dei due dipartimenti. Gli stipendi che sono uguali ricevono lo stesso rango. Confronta questo esempio con l’esempio di 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