CASE文を使うと複雑な条件を指定できます。SELECT句、GRUOP BY句、ORDER BY句でそれぞれ使用した例を紹介します。
目次
基本書式
CASE 評価対象カラム名
WHEN 条件値1 THEN 処理
[WHEN 条件値2 THEN 処理] ...
[ELSE 処理]
END
CASE
WHEN 条件1 THEN 処理
[WHEN 条件2 THEN 処理] ...
[ELSE 処理]
END
動作確認用テーブル
動作確認のための準備をします。
テーブルを作成します。
CREATE TABLE `test`.`testtable` (
`id` INT NOT NULL ,
`old` INT NOT NULL ,
`region` VARCHAR(100) NOT NULL ,
PRIMARY KEY (`id`)
) ENGINE = InnoDB;
レコードを挿入します。
INSERT INTO `testtable` (`id`, `old`, `region`)
VALUES
(1, 50, '四国'),
(2, 23, '九州'),
(3, 11, '本州'),
(4, 80, '北海道'),
(5, 33, '本州');
下記テーブルを例に説明します。
mysql> SELECT * FROM `testtable`;
+----+-----+-----------+
| id | old | region |
+----+-----+-----------+
| 1 | 50 | 四国 |
| 2 | 23 | 九州 |
| 3 | 11 | 本州 |
| 4 | 80 | 北海道 |
| 5 | 33 | 本州 |
+----+-----+-----------+
5 rows in set (0.00 sec)
SELECT句での使用例
データ値によって表示を変えたい場合などに使用します。
mysql> SELECT id, (CASE WHEN (old < 20) THEN 'A'
-> WHEN (old >= 20 AND old < 50) THEN 'B'
-> ELSE 'C' END) as type
-> FROM testtable;
+----+------+
| id | type |
+----+------+
| 1 | C |
| 2 | B |
| 3 | A |
| 4 | C |
| 5 | B |
+----+------+
5 rows in set (0.00 sec)
GRUOP BY句での使用例
mysql> SELECT COUNT(id), (CASE WHEN (old < 20) THEN 'A'
-> WHEN (old >= 20 AND old < 50) THEN 'B'
-> ELSE 'C' END) as type
-> FROM testtable
-> GROUP BY CASE WHEN (old < 20) THEN 'A'
-> WHEN (old >= 20 AND old < 50) THEN 'B'
-> ELSE 'C' END;
+-----------+------+
| COUNT(id) | type |
+-----------+------+
| 1 | A |
| 2 | B |
| 2 | C |
+-----------+------+
3 rows in set (0.00 sec)
ORDER BY句での使用例
任意の順序をつけたい場合に使用します。
mysql> SELECT id, region
-> FROM testtable
-> ORDER BY CASE region WHEN '北海道' THEN '1'
-> WHEN '本州' THEN '2'
-> WHEN '四国' THEN '3'
-> WHEN '九州' THEN '4'
-> ELSE '' END;
+----+-----------+
| id | region |
+----+-----------+
| 4 | 北海道 |
| 3 | 本州 |
| 5 | 本州 |
| 1 | 四国 |
| 2 | 九州 |
+----+-----------+
5 rows in set (0.00 sec)