MySQLのROW_NUMBER()関数とは?行に連番を振る方法を実例付きで解説
ROW_NUMBER()は、MySQL 8.0から利用可能になったウィンドウ関数の一種です。この関数を使うと、クエリ結果の各行に対して連番(シーケンス番号)を割り当てることができます。ランキングの作成やページネーション処理など、さまざまな場面で活躍する便利な関数です。
ここでは、実際にテーブルを作成しながら、ROW_NUMBER()の基本的な使い方を順番に見ていきましょう。
1. テーブルの作成
まず、CREATEコマンドを使ってサンプル用のテーブルを作成します。
mysql> CREATE table rowNumberDemo -> ( -> FirstName varchar(100) -> ); Query OK, 0 rows affected (0.92 sec)
「FirstName」というカラムを1つだけ持つシンプルなテーブル「rowNumberDemo」が作成されました。
2. レコードの挿入
次に、INSERT文を使って複数のレコードを挿入します。
mysql> INSERT into rowNumberDemo values('john');
Query OK, 1 row affected (0.17 sec)
mysql> INSERT into rowNumberDemo values('john');
Query OK, 1 row affected (0.29 sec)
mysql> INSERT into rowNumberDemo values('Bob');
Query OK, 1 row affected (0.13 sec)
mysql> INSERT into rowNumberDemo values('Smith');
Query OK, 1 row affected (0.17 sec)
同じ名前「john」を意図的に2件登録している点に注目してください。ROW_NUMBER()は重複した値でもそれぞれ別の連番を振るため、この挙動を確認するのに適しています。
3. 登録データの確認
SELECT文で全レコードを表示してみましょう。
mysql> SELECT * from rowNumberDemo;
実行結果は以下の通りです。
+-----------+ | FirstName | +-----------+ | john | | john | | Bob | | Smith | +-----------+ 4 rows in set (0.00 sec)
4件のレコードが登録されていることが確認できます。
4. ROW_NUMBER()で連番を振る
それでは本題のROW_NUMBER()を使ってみましょう。以下のようにOVER句とORDER BY句を組み合わせることで、各レコードに対して昇順の連番を割り当てられます。
mysql> SELECT row_number() over ( order by firstName) RowNumberSequence,
-> FirstName
-> from rowNumberDemo
-> order by FirstName;
実行結果は以下の通りです。
+-------------------+-----------+ | RowNumberSequence | FirstName | +-------------------+-----------+ | 1 | Bob | | 2 | john | | 3 | john | | 4 | Smith | +-------------------+-----------+ 4 rows in set (0.00 sec)
実行結果のポイント
出力結果を見ると、row_number()によってすべてのレコードに1から始まる連番が割り当てられていることがわかります。
- ORDER BY句でfirstNameを指定しているため、名前のアルファベット順(Bob → john → john → Smith)に並んでいます。
- 重複している「john」にも、それぞれ別々の番号(2と3)が振られています。これはROW_NUMBER()が同順位を作らず、必ず一意の連番を返すためです。
まとめ
MySQL 8.0以降で使えるROW_NUMBER()は、ウィンドウ関数の一種であり、クエリ結果の各行に簡単に連番を付与できる強力な機能です。基本構文は以下のようになります。
SELECT row_number() OVER (ORDER BY カラム名) AS 連番名, ... FROM テーブル名;
同点を許さず必ず一意の番号を付けたい場合や、グループごと(PARTITION BY句を使用)に採番したい場合などにも対応できるため、ランキング処理やデータ分析の場面でぜひ活用してみてください。
-
MySQLの「SELECT TRUE」とは?意味と使い方を解説
MySQLにおける「SELECT TRUE」の基本MySQLでは、SELECT TRUEというステートメントを実行すると、条件に一致する行ごとに「1」が返されます。これは、MySQLにおいてTRUE(真)という論理値が内部的に整数の「1」として扱われているためです。逆にFALSE(偽)は「0」に相当します。この記事では、実際にテーブルを作成し、SELECT TRUEがどのような結果を返すのかを具体的な例で確認していきます。検証用テーブルの作成まず、以下のコマンドでサンプルテーブルを作成します。mysql> create table DemoTable(Name varchar(100))
-
MySQLの@@identityとは?最後に挿入されたAUTO_INCREMENT値を取得する方法
MySQLにおける@@identityとは @@identityは、現在のセッション内でAUTO_INCREMENTカラムに最後に挿入された値を返すシステム変数です。新規レコード追加後に、自動採番されたIDをすぐに取得したい場合などに活用できます。ここでは、実際にテーブルを作成して動作を確認してみましょう。 1. テーブルの作成 まず、以下のコマンドでサンプル用のテーブルを作成します。 mysql> create table DemoTable( UserId int NOT NULL AUTO_INCREMENT PRIMARY KEY