MySQLのCASE文で同じ列から条件別に値を取り出し、別々の列に表示する方法
MySQLのCASE文で同じ列から条件別に値を取り出す方法
MySQLである列(カラム)の値を複数の条件で判定し、それぞれの結果を別々の列として表示したい場合は、CASE文を使用します。CASE文を組み合わせることで、1つの列から条件に応じた異なる値を柔軟に取り出せます。
まず、サンプル用のテーブルを作成しましょう。
mysql> create table DemoTable ( Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, Name varchar(40), Score int ) ; Query OK, 0 rows affected (0.54 sec)
次に、insertコマンドを使ってテーブルにレコードを挿入します。
mysql> insert into DemoTable(Name,Score) values('Chris',45);
Query OK, 1 row affected (0.24 sec)
mysql> insert into DemoTable(Name,Score) values('David',68);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable(Name,Score) values('Robert',89);
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable(Name,Score) values('Bob',34);
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable(Name,Score) values('Sam',66);
Query OK, 1 row affected (0.22 sec)
select文でテーブル内の全レコードを表示して確認します。
mysql> select *from DemoTable;
実行結果は以下の通りです。
+----+--------+-------+ | Id | Name | Score | +----+--------+-------+ | 1 | Chris | 45 | | 2 | David | 68 | | 3 | Robert | 89 | | 4 | Bob | 34 | | 5 | Sam | 66 | +----+--------+-------+ 5 rows in set (0.00 sec)
同じ列から条件別に値を選択するクエリ
以下が、同じ「Score」列に対して複数のCASE文を適用し、条件ごとの値を別々の列として表示するクエリです。
mysql> select Score, case when Score < 40 then Score end as ' Score Less than 40', case when Score between 60 and 70 then Score end as 'Score Between 60 and 70 ', case when Score > 80 then Score end as 'Score greater than 80' from DemoTable;
実行結果は以下のようになります。
+-------+--------------------+--------------------------+-----------------------+ | Score | Score Less than 40 | Score Between 60 and 70 | Score greater than 80 | +-------+--------------------+--------------------------+-----------------------+ | 45 | NULL | NULL | NULL | | 68 | NULL | 68 | NULL | | 89 | NULL | NULL | 89 | | 34 | 34 | NULL | NULL | | 66 | NULL | 66 | NULL | +-------+--------------------+--------------------------+-----------------------+ 5 rows in set, 1 warning (0.03 sec)
クエリのポイント解説
このクエリでは、3つのCASE文を並べて使用しています。それぞれの動作は以下の通りです。
- case when Score < 40:スコアが40未満の場合のみ、その値を「Score Less than 40」列に出力します。
- case when Score between 60 and 70:スコアが60〜70の範囲にある場合のみ、「Score Between 60 and 70」列に値を出力します。
- case when Score > 80:スコアが80より大きい場合のみ、「Score greater than 80」列に値を出力します。
ELSE句が指定されていないため、どの条件にも一致しなかった行はNULLが返されます。この仕組みにより、元のScore列の値はそのまま残り、条件を満たした列にだけ該当する値が表示されるというわけです。集計やレポート作成などで、1つの数値列を複数の区分けに分けて見せたい場合に非常に便利なテクニックなので、ぜひ活用してみてください。
-
MySQLで条件に応じて同じ列の2つの値を連結する方法
MySQLで条件に応じて同じ列の2つの値を連結する方法 MySQLでは、max() などの集計関数と CASE 式を組み合わせることで、条件の異なる同じ列の値を1つの文字列として連結できます。この記事では、サンプルテーブルを作成しながら、具体的な手順をわかりやすく解説します。 1. サンプルテーブルの作成 まず、create table コマンドでテーブルを作成しましょう。 mysql> create table DemoTable1869 ( Id int, &nb
-
MySQLでハイフン区切りの文字列値を1つの列から複数の列に分離して選択する方法
ハイフンで区切られた文字列値を1つの列から複数の列に分離して取得したい場合、MySQLの SUBSTRING_INDEX() 関数を使用すると簡単に実現できます。ここでは、サンプルテーブルを使って具体的な手順を解説します。 サンプルテーブルの作成 まず、従業員情報を格納するテーブルを作成します。 mysql> create table DemoTable1962 ( EmployeeInformation text ); Query OK, 0 rows affected (0.00 sec) データの挿入 次に、INSERT文を使って「ID-名前-年齢」の形