【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

実行結果イメージ

numNAMEAGE
1Taro10
2Hanako20
3Ichiro30
4Jiro40
5Saburo50

ソートカラムを複数指定

以下サンプルはソートカラムを複数指定した場合で、「AGE」を昇順(ASC)、「NAME」を降順(DESC)で連番を振ります。

SELECT 
 ROW_NUMBER() OVER(ORDER BY u.AGE ASC, u.NAME DESC) num
, u.NAME
, u.AGE
FROM USER u
numNAMEAGE
1Taro10
2Hanako20
3Ichiro30
4Saburo40
5Jiro40

ROW_NUMBERが利用できるDB

ROW_NUMBER関数を利用できるDBは「Oracle」、「SQLserver」、「PostgreSQL」です。

MySQLではROW_NUMBERが使えない?

MySQLではROW_NUMBERが使えないようです。
ユーザ変数を使うことにより似たような処理を行うことは可能なようですが、試したことがないので、「MySQL」、「ROW_NUMBER」で検索してみてください。