DENSE_RANK

Sintassi aggregata

dense_rank_aggregate::=

Descrizione di dense_rank_aggregate.gif segue

Descrizione dell’illustrazione dense_rank_aggregate.gif

Sintassi analitica

dense_rank_analytic::=

Descrizione di dense_rank_analytic.gif segue

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 nel order_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 dei value_exprs nel order_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