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à.
ROWfunzione _ NUMBER window
Assegna un numero ordinale alla riga corrente all'interno di un gruppo di righe, contando a partire da 1, in base all'espressione ORDER BY nella clausola. OVER Se è presente la clausola opzionale PARTITION BY, i numeri ordinali vengono reimpostati per ogni gruppo di righe. Le righe con valori uguali per le espressioni ORDER BY ricevono i diversi numeri di riga in modo non deterministico.
Sintassi
ROW_NUMBER() OVER( [ PARTITION BY expr_list ] [ ORDER BY order_list ] )
Argomenti
- ( )
-
La funzione non accetta argomenti, ma le parentesi vuote sono obbligatorie.
- OVER
-
La clausola della funzione window per la funzione _. ROW NUMBER
- PARTITIONDI expr_list
-
Facoltativo. Una o più espressioni di colonna che dividono i risultati in serie di righe.
- ORDERDI order_list
-
Facoltativo. Una o più espressioni di colonna che definiscono l'ordine delle righe all'interno di un set. Se non viene specificato alcun PARTITION BY, ORDER BY utilizza l'intera tabella.
Se ORDER BY non produce un ordinamento univoco o viene omesso, l'ordine delle righe non è deterministico. Per ulteriori informazioni, consulta Ordinamento univoco dei dati per le funzioni finestra.
Tipo restituito
BIGINT
Esempi
Gli esempi seguenti usano la tabella WINSALES
. Per una descrizione della tabella WINSALES
, consulta Tabella di esempio per gli esempi della funzione finestra.
L'esempio seguente ordina la tabella per QTY (in ordine crescente), quindi assegna un numero di riga a ciascuna riga. I risultati vengono ordinati dopo aver applicato i risultati della funzione finestra.
SELECT salesid, sellerid, qty, ROW_NUMBER() OVER( ORDER BY qty ASC) AS row FROM winsales ORDER BY 4,1;
salesid sellerid qty row ---------+----------+-----+----- 30001 | 3 | 10 | 1 10001 | 1 | 10 | 2 10006 | 1 | 10 | 3 40005 | 4 | 10 | 4 30003 | 3 | 15 | 5 20001 | 2 | 20 | 6 20002 | 2 | 20 | 7 30004 | 3 | 20 | 8 10005 | 1 | 30 | 9 30007 | 3 | 30 | 10 40001 | 4 | 40 | 11
L'esempio seguente partiziona la tabella per SELLERID e ordina ogni partizione per QTY (in ordine crescente), quindi assegna un numero di riga a ciascuna riga. I risultati vengono ordinati dopo aver applicato i risultati della funzione finestra.
SELECT salesid, sellerid, qty, ROW_NUMBER() OVER( PARTITION BY sellerid ORDER BY qty ASC) AS row_by_seller FROM winsales ORDER BY 2,4;
salesid | sellerid | qty | row_by_seller ---------+----------+-----+----- 10001 | 1 | 10 | 1 10006 | 1 | 10 | 2 10005 | 1 | 30 | 3 20001 | 2 | 20 | 1 20002 | 2 | 20 | 2 30001 | 3 | 10 | 1 30003 | 3 | 15 | 2 30004 | 3 | 20 | 3 30007 | 3 | 30 | 4 40005 | 4 | 10 | 1 40001 | 4 | 40 | 2
L'esempio seguente mostra i risultati quando non si utilizzano le clausole opzionali.
SELECT salesid, sellerid, qty, ROW_NUMBER() OVER() AS row FROM winsales ORDER BY 4,1;
salesid sellerid qty row ---------+----------+-----+----- 30001 | 3 | 10 | 1 10001 | 1 | 10 | 2 10005 | 1 | 30 | 3 40001 | 4 | 40 | 4 10006 | 1 | 10 | 5 20001 | 2 | 20 | 6 40005 | 4 | 10 | 7 20002 | 2 | 20 | 8 30003 | 3 | 15 | 9 30004 | 3 | 20 | 10 30007 | 3 | 30 | 11