- Catégories :
Fonctions de la fenêtre (lié au rang)
ROW_NUMBER¶
Renvoie un numéro de ligne unique pour chaque ligne d’une partition de fenêtre.
Le numéro de ligne commence à 1 et continue séquentiellement.
Syntaxe¶
ROW_NUMBER() OVER (
[ PARTITION BY <expr1> [, <expr2> ... ] ]
ORDER BY <expr3> [ , <expr4> ... ] [ { ASC | DESC } ]
)
Arguments¶
Aucun.
Notes sur l’utilisation¶
expr1
etexpr2
spécifient la ou les colonne(s) ou expression(s) à partitionner. Vous pouvez effectuer la partition par 0, 1 ou plusieurs expressions.Par exemple, supposons que vous sélectionniez des données de plusieurs états (ou provinces) et que vous souhaitiez des numéros de ligne compris entre 1 et N dans chaque état ; dans ce cas, vous pouvez partitionner par état.
Si vous ne voulez qu’un seul groupe, omettez la clause
PARTITION BY
.expr3
etexpr4
spécifient la ou les colonnes ou expressions à utiliser pour déterminer l’ordre des lignes. Vous pouvez effectuer le classement par 1 ou plusieurs expressions.Par exemple, si vous souhaitez répertorier les agriculteurs par ordre de production de maïs, utilisez la colonne
bushels_produced
. Pour plus de détails, voir Exemples (dans ce chapitre).
Exemples¶
Affichez les agriculteurs par ordre décroissant en fonction de la quantité de maïs produite et attribuez les numéros de ligne dans cet ordre (l’agriculteur qui produit le plus de maïs porte le numéro de ligne 1).
SELECT state, bushels_produced, ROW_NUMBER() OVER (ORDER BY bushels_produced DESC) FROM corn_production; +--------+------------------+------------+ | state | bushels_produced | ROW_NUMBER | +--------+------------------+------------+ | Kansas | 130 | 1| | Kansas | 120 | 2| | Iowa | 110 | 3| | Iowa | 100 | 4| +--------+------------------+------------+
La requête ci-dessous montre comment attribuer des numéros de ligne dans des partitions. Dans ce cas, les partitions sont des bourses d’échange (par exemple « N » pour « NASDAQ »).
SELECT
symbol,
exchange,
shares,
ROW_NUMBER() OVER (PARTITION BY exchange ORDER BY shares) AS row_number
FROM trades;
+------+--------+------+----------+
|SYMBOL|EXCHANGE|SHARES|ROW_NUMBER|
+------+--------+------+----------+
|SPY |C | 250| 1|
|AAPL |C | 250| 2|
|AAPL |C | 300| 3|
|SPY |N | 100| 1|
|AAPL |N | 300| 2|
|SPY |N | 500| 3|
|QQQ |N | 800| 4|
|QQQ |N | 2000| 5|
|YHOO |N | 5000| 6|
+------+--------+------+----------+