【PostgreSQL】ROWNUMのように行番号(現在行)を取得するROW_NUMBER

PostgreSQLでSELECTした結果に連番を付けるやり方を調査したらウィンドウ関数を使えば出来そうだったのでメモ。

PostgreSQL 8.4から使えるようになったウィンドウ関数。これを使うと今までOracleのようにROWNUMを使えなかったのが、ROW_NUMBER()で実現できる。

8.3以前で実現する場合はshiro氏のブログを参考に。

単純にselectした順番を出力する場合

select row_number() over(), * From tbm_user

例えば年齢ごとに連番を付けることも可能

select row_number() over(partition by age), * From tbm_user

order by句で並び替えたらover()で明示しないとselectした順番にはならない

select row_number() over(order by name), * From tbm_user order by name

応用すれば今までサブクエリーで書いていたのが簡単に実現できそう。

 

下記サイトも参考に

PostgreSQL 文書 3.5. ウィンドウ関数

分析関数の衝撃:CodeZine(コードジン)