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

MySQLで他の列の値に依存する一時的な列を追加する方法

MySQLでは、CASE文を使用して条件を設定することで、他の列の値に依存する一時的な列(計算結果の列)をSELECT文の中で追加できます。実際のテーブルには列を追加せず、クエリの実行時に動的に値を生成できるため、柔軟なデータ表示が可能です。この記事では、具体的なサンプルを使って手順を解説します。

サンプルテーブルの作成

まず、以下のクエリでテーブルを作成します。

mysql> create table DemoTable
    (
    EmployeeId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    EmployeeName varchar(20),
    EmployeeSalary int,
    EmployeeExperience int
    );
Query OK, 0 rows affected (0.64 sec)

レコードの挿入

次に、INSERTコマンドを使ってテーブルにレコードを挿入します。

mysql> insert into DemoTable(EmployeeName,EmployeeSalary,EmployeeExperience) values('Larry',4500,5);
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable(EmployeeName,EmployeeSalary,EmployeeExperience) values('Mike',130000,8);
Query OK, 1 row affected (0.21 sec)
mysql> insert into DemoTable(EmployeeName,EmployeeSalary,EmployeeExperience) values('Sam',11000,5);
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable(EmployeeName,EmployeeSalary,EmployeeExperience) values('Carol',140000,8) ;
Query OK, 1 row affected (0.18 sec)

テーブルの内容を確認する

SELECTコマンドでテーブル内のレコードを表示します。

mysql> select *from DemoTable;

このクエリを実行すると、以下のような結果が出力されます。

+------------+--------------+----------------+--------------------+
| EmployeeId | EmployeeName | EmployeeSalary | EmployeeExperience |
+------------+--------------+----------------+--------------------+
| 1          | Larry        | 4500           | 5                  |
| 2          | Mike         | 130000         | 8                  |
| 3          | Sam          | 11000          | 5                  |
| 4          | Carol        | 140000         | 8                  |
+------------+--------------+----------------+--------------------+
4 rows in set (0.00 sec)

CASE文で一時的な列を追加する

ここからが本題です。以下のクエリでは、EmployeeExperience(勤続年数)の値に応じて計算された NewSalary という一時的な列を追加しています。CASE文の条件により、勤続年数が5年の場合は給与に10,000を加算し、8年の場合は20,000を加算します。

mysql> select EmployeeId,EmployeeName,EmployeeSalary,EmployeeExperience,
case when
   EmployeeExperience=5 then EmployeeSalary+10000
   when EmployeeExperience=8 then EmployeeSalary+20000
else null
   end as NewSalary
from DemoTable;

このクエリを実行すると、以下のような結果が出力されます。

+------------+--------------+----------------+--------------------+-----------+
| EmployeeId | EmployeeName | EmployeeSalary | EmployeeExperience | NewSalary |
+------------+--------------+----------------+--------------------+-----------+
| 1          | Larry        | 4500           | 5                  | 14500     |
| 2          | Mike         | 130000         | 8                  | 150000    |
| 3          | Sam          | 11000          | 5                  | 21000     |
| 4          | Carol        | 140000         | 8                  | 160000    |
+------------+--------------+----------------+--------------------+-----------+
4 rows in set (0.00 sec)

ポイントのまとめ

上記の結果を見ると、NewSalary列には勤続年数に応じた昇給後の給与が表示されています。

  • 勤続年数が5年の社員(Larry・Sam):給与に+10,000された値が表示される
  • 勤続年数が8年の社員(Mike・Carol):給与に+20,000された値が表示される
  • どちらの条件にも当てはまらない場合はNULLが返される

このようにCASE文とAS句(エイリアス)を組み合わせることで、既存のテーブル構造を変更することなく、他の列の値に依存した一時的な列を簡単に作成できます。レポート作成や集計処理など、さまざまな場面で活用できる便利なテクニックなので、ぜひ覚えておきましょう。

  1. 【MySQL】EXISTSとサブクエリで別テーブルの列値と一致する行だけを抽出する方法

    サブクエリとEXISTSを組み合わせるあるテーブルの列値が別のテーブルの列値と一致する場合にのみデータを取得したいときは、サブクエリとEXISTSを組み合わせると簡単に実現できます。まず、1つ目のテーブルを作成しましょう。mysql> create table DemoTable1     -> (     -> Id int,     -> SubjectName varchar(20)     -> )

  2. MySQLで重複する値ごとのレコードを別の列に合計して表示する方法

    MySQLでは、重複している値(同じ名前など)を持つ複数のレコードの数値を、名前ごとにまとめて合計したいケースがあります。このような場合には、集計関数SUM()とGROUP BY句を組み合わせることで簡単に実現できます。本記事では、実際にサンプルテーブルを作成し、重複する値を持つレコードを別の列(合計列)として集計・表示する手順を解説します。1. サンプルテーブルを作成するまず、CREATE TABLE文を使ってテーブルを作成します。mysql> create table DemoTable -> ( -> Name varchar(20), -> V