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()などの集計関数と組み合わせることで、「特定の値の存在チェック」など、実務でもよく使われるテクニックです。
-
MySQLのCASEステートメントでWHEN句を使う方法を実例付きで解説
MySQLのCASEステートメントとWHEN句とはMySQLにおけるCASEステートメントは、条件に応じて異なる値を返すための強力な機能です。WHEN句と組み合わせることで、複数の条件分岐をSQLクエリ内で柔軟に処理できます。例えば、点数に応じて評価ラベルを付けたり、特定の値を別の表示内容に変換したりする際に非常に便利です。CASE WHEN句の基本構文CASEステートメントとWHEN句を使用する際の基本構文は以下の通りです。SELECT *, CASE WHEN 条件1 THEN 返す値1 WHEN 条件2 THEN 返す値2 ...
-
MySQLのUPDATE文の中でSELECTステートメントを使う方法
MySQLでUPDATEコマンドを実行する際に、同じテーブルを参照するSELECTステートメントを組み合わせたいケースはよくあります。しかし、UPDATE文の中で直接サブクエリとして対象テーブルを指定するとエラーになるため、工夫が必要です。解決策:サブクエリとWHERE句を組み合わせるこの問題を回避するには、WHERE句とともにサブクエリを使用し、さらにそのサブクエリを別のSELECT文でラップ(派生テーブル化)します。これにより、MySQLは一時的なテーブルとして扱うため、更新中のテーブルへの参照エラーを防ぐことができます。実際の手順を順番に見ていきましょう。1. テーブルを作成するまず、サ