CASE の使い方
場合分けする
書き方
CASE WHEN 条件 THEN 値 … ELSE 値 END CASE 列 WHEN 値 THEN 値 … END
上から順に調べて最初に合った THEN の値になります。ELSE がなければ NULL。集計の中にも書けます。
よく使うオプション
| オプション | 意味 |
|---|---|
CASE WHEN 条件 THEN 値 | 条件ごとに値を決める(上から順に調べる) |
CASE 列 WHEN 値 THEN 値 | 列の値ごとに決める短い書き方 |
ELSE 値 | どれにも合わなかったときの値(無いと NULL) |
END | CASE の終わり |
例
SELECT name,
CASE WHEN salary >= 350000 THEN '高'
WHEN salary >= 280000 THEN '中'
ELSE '低' END AS band
FROM employees; name | band
------+------
鈴木 | 高
佐藤 | 中
田中 | 低
(3 rows)給与を 3 つの帯に分けて出します。最初に合った WHEN の値になるので、大きい条件から書きます。
SELECT id, CASE status WHEN 'new' THEN '受付' WHEN 'sent' THEN '発送済み' ELSE status END FROM orders;
状態の英語を日本語に置き換えます。決まった値に置き換えるときは短い書き方が読みやすいです。
SELECT SUM(CASE WHEN status = 'cancel' THEN 1 ELSE 0 END) AS canceled FROM orders;
取り消しの注文の数を数えます。集計の中にも CASE を書けます。
SELECT name FROM employees ORDER BY CASE WHEN dept_id = 2 THEN 0 ELSE 1 END, name;
部署 2 の社員を先に、残りをその後に並べます。並べる順も CASE で決められます。
よくある間違い・注意
- THEN の値の型はそろえます。数と文字列を混ぜるとエラーになります。
- ELSE を書き忘れると、どれにも合わない行は NULL になります。
実際に打って練習する
SQL コースの Lv18「場合分け CASE」で覚えます。ブラウザの中のシミュレーターで、本物と同じように打って確かめられます。
Lv1〜3 は、登録不要・無料で遊べます(それより先はブロンズ以上のプランで遊べます)。