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à.
Assegna un numero ordinale di una riga corrente in un gruppo di righe, contando da 1, in base all'espressione ORDER BY nella clausola OVER. Se è presente la clausola PARTITION BY facoltativa, i numeri ordinali vengono ripristinati per ciascun gruppo di righe. Le righe con valori uguali per le espressioni ORDER BY ricevono i numeri di riga diversi 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 finestra per la funzione ROW_NUMBER.
- PARTITION BY expr_list
-
Facoltativo. Una o più espressioni di colonna che dividono i risultati in serie di righe.
- ORDER BY order_list
-
Facoltativo. Una o più espressioni di colonna che definiscono l'ordine delle righe all'interno di un set. Se non viene specificato nessun 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, consultare 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 esegue ordina la tabella in base a QTY (in ordine crescente), quindi assegna un numero di riga a ogni 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 esegue la partizione della tabella in SELLERID e ordina ciascuna partizione in base a QTY (in ordine crescente), quindi assegna un numero di riga a ogni 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