« SHIROBAKO 円盤買いました! | トップページ | PostgreSQLでのhint »

2015.02.16

小技:行に連番を付与する

検索結果に対して、連番を振りたい、というニーズはそこそこある。
最近のRDBMSではこれがかなり簡単に実現できる。
row_number()関数である。

PostgreSQLについてはVer8.4からサポートされたウィンドウ関数群のひとつで、

row_number():1から数えたパーティション内の現在行の数
こういうことである。

なので単純に下記でよい。

SELECT (row_number() OVER()) as seq , col1, col2 FROM hogehoge;
ただし、ウィンドウ関数として機能するためにはOVER句が必要となる。
またOVER内にソート条件を設定できるので、
SELECT (row_number() OVER(ORDER BY col2)) as seq , col1, col2 FROM hogehoge;
のような形で利用する。

また人によっては連番を0埋めなどしたい、ということもあるだろう。
そうした場合は通常通りto_char関数でフォーマッティングすればいい。

SELECT to_char((row_number() OVER(ORDER BY col2)),'FM99990999') as seq
, col1, col2 FROM hogehoge;
こうすれば0001~0999までが0埋めされた形で整形される。
ある後輩がテストデータを作成するときに、固定長連番を出力したかったようだがFM接頭辞を知らなかったので 999 + row_number() OVER() という具合に豪快に桁揃えをしている事例を見つけてしまったので、おまけでto_charの話題も触れてみました(^^;

|

« SHIROBAKO 円盤買いました! | トップページ | PostgreSQLでのhint »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/2022/61115218

この記事へのトラックバック一覧です: 小技:行に連番を付与する:

« SHIROBAKO 円盤買いました! | トップページ | PostgreSQLでのhint »