カテゴリ:

ウィンドウ関数の構文と使用法 (ランキング)

ROW_NUMBER

ウィンドウパーティション内の各行に一意の行番号を返します。

行番号は1から始まり、連続して続きます。

構文

ROW_NUMBER() OVER (
  [ PARTITION BY <expr1> [, <expr2> ... ] ]
  ORDER BY <expr3> [ , <expr4> ... ] [ { ASC | DESC } ]
  )
Copy

引数

なし。

使用上の注意

  • expr1 および expr2 は、パーティション化する列または式を指定します。0、1、またはそれ以上の式でパーティションを分割できます。

    たとえば、複数の州(または県)にわたってデータを選択しており、各州内で1からNまでの行番号が必要であるとします。その場合、状態ごとに分割できます。

    単一のグループのみが必要な場合は、 PARTITION BY 句を省略します。

  • expr3 および expr4 は、行の順序を決定するために使用する列または式を指定します。1個以上の式で指定できます。

    例えば、トウモロコシの生産順に農家をリストしたい場合は、 bushels_produced 列を使用します。詳細については、 (このトピック)をご参照ください。

以下のクエリは、パーティション内で行番号を割り当てる方法を示しています。この場合、パーティションは証券取引所です(例えば、「N」は「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|
+------+--------+------+----------+