Oracle SQLでグループ単位に連番を振る方法 ROW_NUMBER

SQLでグループ単位に連番を振る方法です。

Oracle SQLでグループ単位に連番を振る方法 ROW_NUMBER

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関数を使って、結果をみていきます。

サンプルデータ

今回使ったサンプルデータです。

ROW_NUMBER関数を使ったサンプルデータ

連番を振る

単純に名前順に連番を振るSQLです。


SELECT
 ROW_NUMBER() OVER(ORDER BY NAME ASC) NUM
,NAME
,SEX
,SALARY
FROM EMPLOYEES

結果はこの通り。

ROW_NUMBER関数で連番を振る

ソートカラムを複数指定して連番を振る

次は、性別の名前順に並べてみます。


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」では使えないんですよね。ここでは割愛しますが、別の方法でグループ単位に連番を振ることができるので、興味のある方は調べてみてください。

おつかれさまでした。

この記事がお役に立ちましたら シェア をお願いいたします。