SQL道場 集計関数 ROW_NUMBER関数

SQLで行番号をつけるROW_NUMBER関数について記載しています。

対応データベース:SQLServer Oracle DB2

ROW_NUMBER関数の文法

SELECT ROW_NUMBER() OVER(PARTITION BY パーティションを指定する式 | ORDER BY 順位を指定する式) FROM テーブル
引数
Arguments
パーティションを指定する式
An expression that specifies a partition
順位を指定する式
An expression that specifies the rank
返値
return value
数値型 行番号
Numeric Line Number

ROW_NUMBER関数は行番号を求め、同順のものにも順番に番号を振ります。PARTITION BYにより順位付けを行うグループを指定できます。PARTIOTION BYを省略した場合は全体に対して順位付けが行われます。ORDER BY の後ろの順位を指定する式には通常のORDER BY と同じくASC・・・昇順、DESC・・・降順の指定が可能です。また、ORDER BYには集計関数の指定も可能です。

実行例

社員テーブル

社員名(EMP_NAME)年齢(EMP_AGE)性別(EMP_SEX)時給(EMP_SALARY)
山田太郎351,000
鈴木花子201,500
竹下次郎302,500
佐藤梅子40800
ジュン鎌田23800
田中誠二202,500

SQLServerの実行例

/* SQLServer 時給が高い順に行番号をつけるサンプル */

SELECT EMP_SALARY ,ROW_NUMBER() OVER(ORDER BY EMP_SALARY DESC) FROM [testdb].[dbo].[MST_EMPLOYEE] ORDER BY EMP_SALARY DESC;
SQLServer 時給が高い順に行番号をつけるサンプル実行結果
/* SQLServer 年齢ごとに時給が高い順に行番号をつけるサンプル */

SELECT EMP_AGE,EMP_SALARY ,ROW_NUMBER() OVER(PARTITION BY EMP_AGE ORDER BY EMP_SALARY DESC) FROM [testdb].[dbo].[MST_EMPLOYEE] ORDER BY EMP_AGE,EMP_SALARY DESC;
SQLServer 年齢ごとに時給が高い順に行番号をつけるサンプル実行結果
/* SQLServer 年齢ごとの時給の平均を求め高い順に行番号をつけるサンプル */

SELECT EMP_AGE,AVG(EMP_SALARY) ,ROW_NUMBER() OVER(ORDER BY AVG(EMP_SALARY) DESC) FROM [testdb].[dbo].[MST_EMPLOYEE] GROUP BY EMP_AGE;
SQLServer 年齢ごとの時給の平均を求め高い順に行番号をつけるサンプル実行結果