ROW_NUMBER ウィンドウ関数
OVER 句の ORDER BY 式に基づいて、行グループ内における (1 からカウントした) 現在の行の序数が決まります。オプションの PARTITION BY 句がある場合、序数は行グループごとにリセットされます。ORDER BY 式で同じ値を持つ行には、確定的でない方法で異なる行番号が割り当てられます。
構文
ROW_NUMBER () OVER ( [ PARTITION BY expr_list ] [ ORDER BY order_list ] )
引数
- ( )
-
この関数は引数を受け取りませんが、空のかっこは必要です。
- OVER
-
ROW_NUMBER 関数のウィンドウ句。
- PARTITION BY expr_list
-
省略可能。ROW_NUMBER 関数を定義する 1 つ以上の式。
- ORDER BY order_list
-
省略可能。行番号の基になる列を定義する式。PARTITION BY が指定されていない場合、ORDER BY はテーブル全体を使用します。
ORDER BY で一意の順序付けが行われない、または省略した場合、行の順序は不確定になります。詳細については、「ウィンドウ関数用データの一意の並び順」を参照してください。
戻り型
BIGINT
例
次の例では、SELLERID によってテーブルをパーティション化し、QTY によって各パーティションを (昇順で) 順序付けし、各行に行番号を割り当てます。結果はウィンドウ関数の結果が提供された後にソートされます。
select salesid, sellerid, qty, row_number() over (partition by sellerid order by qty asc) as row from winsales order by 2,4; salesid | sellerid | qty | row ---------+----------+-----+----- 10006 | 1 | 10 | 1 10001 | 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 (11 rows)
WINSALES テーブルの説明については、「ウィンドウ関数例のサンプルテーブル」を参照してください。