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

MySQLでSELECT文の中にCASE式を使う方法を解説

MySQLでは、SELECT文の中でCASE WHEN式を使うことで、条件に応じた値を返すことができます。本記事では、具体的なサンプルを使いながら、その基本的な使い方をわかりやすく解説します。

1. サンプルテーブルの作成

まず、デモ用のテーブルを作成します。

mysql> create table DemoTable
-> (
-> FirstName varchar(20),
-> Score int
-> );
Query OK, 0 rows affected (0.63 sec)

2. テストデータの挿入

INSERTコマンドを使って、いくつかのレコードを挿入します。

mysql> insert into DemoTable values('John',46);
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable values('John',78);
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values('John',69);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values('Chris',78);
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable values('Chris',89);
Query OK, 1 row affected (0.17 sec)

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

SELECT文ですべてのレコードを表示してみましょう。

mysql> select *from DemoTable;

実行すると、次のような結果が出力されます。

+-----------+-------+
| FirstName | Score |
+-----------+-------+
| John | 46 |
| John | 78 |
| John | 69 |
| Chris | 78 |
| Chris | 89 |
+-----------+-------+
5 rows in set (0.00 sec)

4. SELECT文内でCASE式を使うクエリ

ここからが本題です。以下のクエリは、SELECT文の中にCASE式を組み込み、各ユーザーのスコアに「69」が存在するかどうかを判定しています。

mysql> select FirstName,max(case when Score=69 then 1 else 0 end ) as isExistsOrNot
-> from DemoTable
-> group by FirstName;

このクエリでは、CASE WHEN Score=69 THEN 1 ELSE 0 ENDによって、スコアが69なら「1」、それ以外なら「0」を返し、それをMAX()関数で集計しています。これにより、グループ内に該当するレコードが1件でもあれば「1」になる仕組みです。

実行結果は以下のとおりです。

+-----------+---------------+
| FirstName | isExistsOrNot |
+-----------+---------------+
| John | 1 |
| Chris | 0 |
+-----------+---------------+
2 rows in set (0.00 sec)

まとめ

出力結果を見ると、「John」にはスコア69のレコードが存在するため「1」が表示され、「Chris」には存在しないため「0」が表示されています。このようにCASE式をSELECT文内で活用すれば、条件分岐による柔軟なデータ判定やフラグ生成が簡単に行えます。MAX()SUM()などの集計関数と組み合わせることで、「特定の値の存在チェック」など、実務でもよく使われるテクニックです。

  1. MySQLのCASEステートメントでWHEN句を使う方法を実例付きで解説

    MySQLのCASEステートメントとWHEN句とはMySQLにおけるCASEステートメントは、条件に応じて異なる値を返すための強力な機能です。WHEN句と組み合わせることで、複数の条件分岐をSQLクエリ内で柔軟に処理できます。例えば、点数に応じて評価ラベルを付けたり、特定の値を別の表示内容に変換したりする際に非常に便利です。CASE WHEN句の基本構文CASEステートメントとWHEN句を使用する際の基本構文は以下の通りです。SELECT *, CASE WHEN 条件1 THEN 返す値1 WHEN 条件2 THEN 返す値2 ...

  2. MySQLのUPDATE文の中でSELECTステートメントを使う方法

    MySQLでUPDATEコマンドを実行する際に、同じテーブルを参照するSELECTステートメントを組み合わせたいケースはよくあります。しかし、UPDATE文の中で直接サブクエリとして対象テーブルを指定するとエラーになるため、工夫が必要です。解決策:サブクエリとWHERE句を組み合わせるこの問題を回避するには、WHERE句とともにサブクエリを使用し、さらにそのサブクエリを別のSELECT文でラップ(派生テーブル化)します。これにより、MySQLは一時的なテーブルとして扱うため、更新中のテーブルへの参照エラーを防ぐことができます。実際の手順を順番に見ていきましょう。1. テーブルを作成するまず、サ