Catégories :

Syntaxe et utilisation des fonctions de fenêtre (Classement)

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 } ]
  )
Copy

Arguments

Aucun.

Notes sur l’utilisation

  • expr1 et expr2 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 PARTITIONBY.

  • expr3 et expr4 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

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;
Copy
+------+--------+------+----------+
|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|
+------+--------+------+----------+