【MySQL入門】行数を連番(シリアル番号)として表示する新しい列を追加する方法
MySQLでSELECT文の結果に行数を連番(シリアル番号)としてカウントした新しい列を追加したい場合、ユーザー定義変数(グローバル変数)を活用することで実現できます。本記事では、実際にテーブルを作成し、データを登録しながら具体的な手順を解説します。
1. テーブルの作成
まずはサンプル用のテーブルを作成しましょう。以下のCREATE TABLE文を実行します。
mysql> create table addColumnToCountAsSerialNumber
-> (
-> Id int,
-> Name varchar(20),
-> Age int,
-> Salary int
-> );
Query OK, 0 rows affected (0.80 sec)
2. サンプルデータの挿入
次に、INSERTコマンドを使ってテーブルにレコードを追加していきます。
mysql> insert into addColumnToCountAsSerialNumber values(10,'John',23,8576); Query OK, 1 row affected (0.10 sec) mysql> insert into addColumnToCountAsSerialNumber values(12,'Carol',21,4686); Query OK, 1 row affected (0.14 sec) mysql> insert into addColumnToCountAsSerialNumber values(9,'Mike',22,38585); Query OK, 1 row affected (0.11 sec) mysql> insert into addColumnToCountAsSerialNumber values(15,'Sam',25,38586); Query OK, 1 row affected (0.16 sec) mysql> insert into addColumnToCountAsSerialNumber values(20,'Bob',26,43544); Query OK, 1 row affected (0.17 sec) mysql> insert into addColumnToCountAsSerialNumber values(39,'Larry',29,485886); Query OK, 1 row affected (0.16 sec)
3. 登録データの確認
SELECT文ですべてのレコードを表示して、正しくデータが登録されているか確認します。
mysql> select *from addColumnToCountAsSerialNumber;
実行結果は以下のとおりです。
+------+-------+------+--------+ | Id | Name | Age | Salary | +------+-------+------+--------+ | 10 | John | 23 | 8576 | | 12 | Carol | 21 | 4686 | | 9 | Mike | 22 | 38585 | | 15 | Sam | 25 | 38586 | | 20 | Bob | 26 | 43544 | | 39 | Larry | 29 | 485886 | +------+-------+------+--------+ 6 rows in set (0.00 sec)
4. 行数を連番としてカウントするクエリ
それでは本題です。各行をシリアル番号としてカウントし、新しい列として表示するには、以下のようなクエリを使用します。ポイントは、FROM句内でユーザー定義変数「@globalVar」を0で初期化し、SELECT句で「@globalVar:=@globalVar+1」として1行ごとに値をインクリメントしている点です。
mysql> select @globalVar:=@globalVar+1 RowCount,tblColumns.*
-> from (select @globalVar:=0) initializeGlobalVariable,addColumnToCountAsSerialNumber tblColumns;
5. 実行結果
上記クエリを実行すると、「RowCount」という新しい列に1から順に採番された連番が表示されます。
+----------+------+-------+------+--------+ | RowCount | Id | Name | Age | Salary | +----------+------+-------+------+--------+ | 1 | 10 | John | 23 | 8576 | | 2 | 12 | Carol | 21 | 4686 | | 3 | 9 | Mike | 22 | 38585 | | 4 | 15 | Sam | 25 | 38586 | | 5 | 20 | Bob | 26 | 43544 | | 6 | 39 | Larry | 29 | 485886 | +----------+------+-------+------+--------+ 6 rows in set (0.06 sec)
補足:MySQL 8.0以降ではROW_NUMBER()関数が便利
なお、MySQL 8.0以降を使用している場合は、ウィンドウ関数の「ROW_NUMBER()」を使う方法が推奨されます。こちらの方が可読性が高く、パフォーマンス面でも優れています。
mysql> SELECT ROW_NUMBER() OVER() AS RowCount, Id, Name, Age, Salary
-> FROM addColumnToCountAsSerialNumber;
このように、ユーザー定義変数を利用した手法は古いバージョンのMySQLでも動作する汎用的なテクニックですが、環境が許すのであればROW_NUMBER()関数の利用を検討するとよいでしょう。
-
【MySQL】SELECTクエリ結果に行数(行番号)を値とする新しい列を追加する方法
SELECTクエリの結果に新しい列を追加し、その値として行数(行番号)を設定したい場合は、MySQLのrow_number()を使用することで実現できます。ここでは、実際にサンプルを使いながら手順を解説します。1. テーブルの作成まず、以下のようにテーブルを作成します。mysql> create table DemoTable1342 -> ( -> Score int -> );Query OK, 0 rows affected (0.68 sec)2. レコードの挿入次に、INSERTコマンドを使ってテーブルにデータを登録します。mysql>
-
MySQLで45日後の日付を計算し、新しい列として表示するクエリの書き方
MySQLで45日後の日付を新しい列に表示する方法 日付・時刻型の列に45日を加算し、その結果を元の列とは別の新しい列として表示したい場合は、date_add() 関数を使うのが最も簡単です。ここでは、テーブルの作成からデータの挿入、そして45日を加算するクエリの実行まで、手順を追って解説します。 1. テーブルを作成する まず、DATETIME型の列「DueTime」を持つテーブルを作成します。 mysql> create table DemoTable1930 ( DueTime datetime ); Query OK, 0 rows affected (