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) |
---|---|---|---|
山田太郎 | 35 | 男 | 1,000 |
鈴木花子 | 20 | 女 | 1,500 |
竹下次郎 | 30 | 男 | 2,500 |
佐藤梅子 | 40 | 女 | 800 |
ジュン鎌田 | 23 | 男 | 800 |
田中誠二 | 20 | 男 | 2,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 年齢ごとに時給が高い順に行番号をつけるサンプル */
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 年齢ごとの時給の平均を求め高い順に行番号をつけるサンプル */
SELECT EMP_AGE,AVG(EMP_SALARY) ,ROW_NUMBER() OVER(ORDER BY AVG(EMP_SALARY) DESC) FROM [testdb].[dbo].[MST_EMPLOYEE] GROUP BY EMP_AGE;