Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
DENSEfunzione _ RANK window
La funzione DENSE _ RANK window determina il rango di un valore in un gruppo di valori, in base all'espressione ORDER BY nella OVER clausola. Se è presente la clausola facoltativa PARTITION BY, le classificazioni vengono reimpostate per ogni gruppo di righe. Righe con valori uguali per i criteri di classificazione ricevono la stessa classificazione. La RANK funzione DENSE _ differisce da RANK un aspetto: se due o più righe sono uguali, non c'è spazio nella sequenza dei valori classificati. Ad esempio, se due righe sono classificate come 1
, il livello successivo è 2
.
È possibile avere funzioni di classificazione con clausole PARTITION BY e ORDER BY diverse nella stessa query.
Sintassi
DENSE_RANK() OVER ( [ PARTITION BY expr_list ] [ ORDER BY order_list ] )
Argomenti
- ( )
-
La funzione non accetta argomenti, ma le parentesi vuote sono obbligatorie.
- OVER
-
Le clausole window per la funzione _. DENSE RANK
- PARTITIONDI expr_list
-
(Facoltativo) Una o più espressioni che definiscono la finestra.
- ORDERDI order_list
-
(Facoltativo) L'espressione su cui si basano i valori di classificazione. Se non viene specificato alcun PARTITION BY, ORDER BY utilizza l'intera tabella. Se ORDER BY viene omesso, il valore restituito si riferisce a tutte
1
le righe.Se ORDER BY non produce un ordinamento univoco, l'ordine delle righe non è deterministico. Per ulteriori informazioni, consulta Ordinamento univoco dei dati per le funzioni finestra.
Tipo restituito
INTEGER
Esempi
Gli esempi seguenti utilizzano la tabella di esempio per le funzioni delle finestre. Per ulteriori informazioni, consulta Tabella di esempio per gli esempi della funzione finestra.
Nel seguente esempio viene ordinata la tabella in base alla quantità venduta e viene assegnata una classificazione densa e una classificazione regolare a ciascuna riga. I risultati vengono ordinati dopo aver applicato i risultati della funzione finestra.
SELECT salesid, qty, DENSE_RANK() OVER(ORDER BY qty DESC) AS d_rnk, RANK() OVER(ORDER BY qty DESC) AS rnk FROM winsales ORDER BY 2,1;
+---------+-----+-------+-----+ | salesid | qty | d_rnk | rnk | +---------+-----+-------+-----+ | 10001 | 10 | 5 | 8 | | 10006 | 10 | 5 | 8 | | 30001 | 10 | 5 | 8 | | 40005 | 10 | 5 | 8 | | 30003 | 15 | 4 | 7 | | 20001 | 20 | 3 | 4 | | 20002 | 20 | 3 | 4 | | 30004 | 20 | 3 | 4 | | 10005 | 30 | 2 | 2 | | 30007 | 30 | 2 | 2 | | 40001 | 40 | 1 | 1 | +---------+-----+-------+-----+
Nota la differenza di classificazione assegnata allo stesso set di righe quando DENSE _ RANK e le RANK funzioni vengono utilizzate fianco a fianco nella stessa query.
Nel seguente esempio la tabella viene partizionata per sellerid, ciascuna partizione viene ordinata in base alla quantità e viene assegnata una classificazione densa a ciascuna riga. I risultati vengono ordinati dopo aver applicato i risultati della funzione finestra.
SELECT salesid, sellerid, qty, DENSE_RANK() OVER(PARTITION BY sellerid ORDER BY qty DESC) AS d_rnk FROM winsales ORDER BY 2,3,1;
+---------+----------+-----+-------+ | salesid | sellerid | qty | d_rnk | +---------+----------+-----+-------+ | 10001 | 1 | 10 | 2 | | 10006 | 1 | 10 | 2 | | 10005 | 1 | 30 | 1 | | 20001 | 2 | 20 | 1 | | 20002 | 2 | 20 | 1 | | 30001 | 3 | 10 | 4 | | 30003 | 3 | 15 | 3 | | 30004 | 3 | 20 | 2 | | 30007 | 3 | 30 | 1 | | 40005 | 4 | 10 | 2 | | 40001 | 4 | 40 | 1 | +---------+----------+-----+-------+
Per utilizzare correttamente l'ultimo esempio, utilizzate il comando seguente per inserire una riga nella WINSALES tabella. Questa riga ha lo stesso buyerid, sellerid e qtysold di un'altra riga. Ciò causerà il collegamento di due righe nell'ultimo esempio e quindi mostrerà la differenza tra DENSE _ RANK e RANK le funzioni.
INSERT INTO winsales VALUES(30009, '2/2/2003', 3, 'b', 20, NULL);
Nel seguente esempio la tabella viene partizionata per buyerid e sellerid, ciascuna partizione viene ordinata in base alla quantità e viene assegnata una classificazione densa e una classificazione regolare a ciascuna riga. I risultati vengono ordinati dopo aver applicato la funzione finestra.
SELECT salesid, sellerid, qty, buyerid, DENSE_RANK() OVER(PARTITION BY buyerid, sellerid ORDER BY qty DESC) AS d_rnk, RANK() OVER (PARTITION BY buyerid, sellerid ORDER BY qty DESC) AS rnk FROM winsales ORDER BY rnk;
+---------+----------+-----+---------+-------+-----+ | salesid | sellerid | qty | buyerid | d_rnk | rnk | +---------+----------+-----+---------+-------+-----+ | 20001 | 2 | 20 | b | 1 | 1 | | 30007 | 3 | 30 | c | 1 | 1 | | 10006 | 1 | 10 | c | 1 | 1 | | 10005 | 1 | 30 | a | 1 | 1 | | 20002 | 2 | 20 | c | 1 | 1 | | 30009 | 3 | 20 | b | 1 | 1 | | 40001 | 4 | 40 | a | 1 | 1 | | 30004 | 3 | 20 | b | 1 | 1 | | 10001 | 1 | 10 | c | 1 | 1 | | 40005 | 4 | 10 | a | 2 | 2 | | 30003 | 3 | 15 | b | 2 | 3 | | 30001 | 3 | 10 | b | 3 | 4 | +---------+----------+-----+---------+-------+-----+