【注目記事】
・SEの転職体験談 | 受託開発から自社製品開発へ ・SIer勤務のSEがパソナキャリアに相談してみた ・SIer勤務のSEがマイナビエージェントに相談してみた
SQL Serverで検索結果に対して連番をふれるROW_NUMBERの使い方を解説します。
目次
ROW_NUMBERの構文
ROW_NUMBERの構文は下記の通りです。
- PATITION BY : GROUP BYと同様にグルーピング対象の列を指定できます。この引数は省略可能で、グループごとに連番を設定したい時に使用します。
- ORDER BY : 並び替えする基準となる列を指定します。
使用例
ROW_NUMBERの使用例を紹介します。
使用データ
学生情報を管理するテーブルを使用します。
学生番号 | 名前 | 性別 |
StudentID | Name | Sex |
1 | 山田 太郎1 | 男 |
2 | 鈴木 花子1 | 女 |
3 | 山田 太郎2 | 男 |
4 | 鈴木 花子2 | 女 |
5 | 山田 太郎3 | 男 |
6 | 鈴木 花子3 | 女 |
例 : テーブル全体に連番をふる
SQL
テーブル全体に連番を振る場合は、PATITION BYに何も指定せず、ORDER BYのみ指定します。
例では、ORDER BYに学生番号(StudentID)を指定しています。
処理結果
学生番号(StudentID)とROW_NUMBERで取得した順番が同じ値になります。
StudentID | Name | Sex | 順番 |
1 | 山田 太郎1 | 男 | 1 |
2 | 鈴木 花子1 | 女 | 2 |
3 | 山田 太郎2 | 男 | 3 |
4 | 鈴木 花子2 | 女 | 4 |
5 | 山田 太郎3 | 男 | 5 |
6 | 鈴木 花子3 | 女 | 6 |
例 : グループごとに連番をふる
SQL
グループごとに連番を振る場合は、PATITION BYにグループ化する列を指定します。
例では性別(Sex)でグループ化しています。
処理結果
性別(Sex)ごとに、学生番号(StudentID)の順に連番がふられます。
StudentID | Name | Sex | 順番 |
2 | 鈴木 花子1 | 女 | 1 |
4 | 鈴木 花子2 | 女 | 2 |
6 | 鈴木 花子3 | 女 | 3 |
1 | 山田 太郎1 | 男 | 1 |
3 | 山田 太郎2 | 男 | 2 |
5 | 山田 太郎3 | 男 | 3 |
連番をWHERE句で使用する場合
ROW_NUMBERで取得した連番を、WHERE句で使用することはできません。
WHERE句で使用するためには、 ROW_NUMBER を副問い合わせの中で使い、副問い合わせの結果に対して検索条件を指定します。
RANK、DENSE_RANKとの違い
ROW_NUMBERと同様に連番を取得する関数に「RANK」と「 DENSE_RANK 」があります。
違いは同じ順位のデータがあった場合の挙動です。
種類 | 概要 |
ROW_NUMBER | 同じ順位であっても別の連番になります。連番は実行のたびに変わることがあります。 |
RANK | 同じ順位は同じ連番となり、その次の順位は飛ばします。 |
DENSE_RANK | 同じ順位は同じ連番となり、その次の順位は飛ばしません。 |
SQL
処理結果
StudentID | Name | Sex | ROW_NUMBER | RANK | DENSE_RANK |
1 | 山田 太郎1 | 男 | 1 | 1 | 1 |
1 | 鈴木 花子1 | 女 | 2 | 1 | 1 |
1 | 山田 太郎2 | 男 | 3 | 1 | 1 |
4 | 鈴木 花子2 | 女 | 4 | 4 | 2 |
5 | 山田 太郎3 | 男 | 5 | 5 | 3 |
6 | 鈴木 花子3 | 女 | 6 | 6 | 4 |
参考書籍
SQLスキルを高めるためのおススメ書籍
SQLのスキルを高めるには、学校の試験勉強と同じように多くの問題を解いてみるのが効率的です。
『スッキリわかるSQL入門 第2版 ドリル222問付き! (スッキリシリーズ)』は、SQLの基本的な内容の解説に加え、200問を超える問題が掲載されているので、SQL初心者が学習に使うのにおススメです。
実際、この書籍を新卒1年目の新人さんに2-3週間かけて取組んでもらったことがあり、書籍を読んだ後に簡単なSQLの改修を任せましたが、基本的な部分にはつまずかずに改修を進められました。
コメントを残す