【SQL】ROW_NUMBER関数を使ってみる
ROW_NUMBER関数は、SELECTの結果に対して1からの連番を振るための関数。
RANK関数は同じ順位(同じ値)の場合、同じ番号を振るため、必ずしも連番になるとは限らない。
ROW_NUMBERを使い単純な連番を振る
以下のサンプルはROW_NUMBER関数で「AGE」を昇順(ASC)で連番を振ります。
SELECT
ROW_NUMBER() OVER(ORDER BY u.AGE ASC) num
, u.NAME
, u.AGE
FROM USER u
実行結果イメージ
| num | NAME | AGE |
|---|---|---|
| 1 | Taro | 10 |
| 2 | Hanako | 20 |
| 3 | Ichiro | 30 |
| 4 | Jiro | 40 |
| 5 | Saburo | 50 |
ソートカラムを複数指定
以下サンプルはソートカラムを複数指定した場合で、「AGE」を昇順(ASC)、「NAME」を降順(DESC)で連番を振ります。
SELECT
ROW_NUMBER() OVER(ORDER BY u.AGE ASC, u.NAME DESC) num
, u.NAME
, u.AGE
FROM USER u
| num | NAME | AGE |
|---|---|---|
| 1 | Taro | 10 |
| 2 | Hanako | 20 |
| 3 | Ichiro | 30 |
| 4 | Saburo | 40 |
| 5 | Jiro | 40 |
ROW_NUMBERが利用できるDB
ROW_NUMBER関数を利用できるDBは「Oracle」、「SQLserver」、「PostgreSQL」です。
MySQLではROW_NUMBERが使えない?
MySQLではROW_NUMBERが使えないようです。
ユーザ変数を使うことにより似たような処理を行うことは可能なようですが、試したことがないので、「MySQL」、「ROW_NUMBER」で検索してみてください。

ディスカッション
コメント一覧
まだ、コメントがありません