MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

【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()関数の利用を検討するとよいでしょう。

  1. 【MySQL】SELECTクエリ結果に行数(行番号)を値とする新しい列を追加する方法

    SELECTクエリの結果に新しい列を追加し、その値として行数(行番号)を設定したい場合は、MySQLのrow_number()を使用することで実現できます。ここでは、実際にサンプルを使いながら手順を解説します。1. テーブルの作成まず、以下のようにテーブルを作成します。mysql> create table DemoTable1342 -> ( -> Score int -> );Query OK, 0 rows affected (0.68 sec)2. レコードの挿入次に、INSERTコマンドを使ってテーブルにデータを登録します。mysql>

  2. MySQLで45日後の日付を計算し、新しい列として表示するクエリの書き方

    MySQLで45日後の日付を新しい列に表示する方法 日付・時刻型の列に45日を加算し、その結果を元の列とは別の新しい列として表示したい場合は、date_add() 関数を使うのが最も簡単です。ここでは、テーブルの作成からデータの挿入、そして45日を加算するクエリの実行まで、手順を追って解説します。 1. テーブルを作成する まず、DATETIME型の列「DueTime」を持つテーブルを作成します。 mysql> create table DemoTable1930 ( DueTime datetime ); Query OK, 0 rows affected (