Oracle SQLでグループ単位に連番を振る方法 ROW_NUMBER
SQLでグループ単位に連番を振る方法です。
1回のSQL実行で、グループ単位に連番を振るには「ROW_NUMBER関数」を使用します。ROW_NUMBER関数を使うことで、グループ単位に連番を振ったり、ソート条件を指定して連番を振ることができます。
ここでは SQLでグループ単位に連番を振る方法 を紹介します。
目次
ROW_NUMBER関数の仕様
ROW_NUMBER関数の仕様は下記のとおりです。
ROW_NUMBER() OVER ( [ PARTITION BY [パーティションカラム], [パーティションカラム], ...] ORDER BY [ソートカラム], [ソートカラム], ... )
PARTITION BY (パーティションカラム)
省略可能です。指定した場合は、結果セットをパーティションカラムで分割して連番が振られます。
ORDER BY (ソートカラム)
省略不可です。パーティション内の行に連番を振る順序を指定します。昇順(ASC)、降順(DESC)の指定ができます。
ROW_NUMBER関数を使ってみる
ROW_NUMBER関数を使って、結果をみていきます。
サンプルデータ
今回使ったサンプルデータです。
連番を振る
単純に名前順に連番を振るSQLです。
SELECT
ROW_NUMBER() OVER(ORDER BY NAME ASC) NUM
,NAME
,SEX
,SALARY
FROM EMPLOYEES
結果はこの通り。
ソートカラムを複数指定して連番を振る
次は、性別の名前順に並べてみます。
SELECT
ROW_NUMBER() OVER(ORDER BY SEX ASC, NAME ASC) NUM
,NAME
,SEX
,SALARY
FROM EMPLOYEES
結果はこの通り。
グループ単位(パーティションごと)に連番を振る
最後は、性別単位の年収が高い順に並べてみます。
SELECT
ROW_NUMBER() OVER(PARTITION BY SEX ORDER BY SALARY DESC) NUM
,NAME
,SEX
,SALARY
FROM EMPLOYEES
結果はこの通り。
まとめ
SQLでグループ単位に連番を振る方法を紹介しました。
実は「ROW_NUBER関数」は「MySQL」では使えないんですよね。ここでは割愛しますが、別の方法でグループ単位に連番を振ることができるので、興味のある方は調べてみてください。
おつかれさまでした。