CASE の使い方

場合分けする

書き方

CASE WHEN 条件 THEN 値 … ELSE 値 END
CASE 列 WHEN 値 THEN 値 … END

上から順に調べて最初に合った THEN の値になります。ELSE がなければ NULL。集計の中にも書けます。

よく使うオプション

オプション意味
CASE WHEN 条件 THEN 値条件ごとに値を決める(上から順に調べる)
CASE 列 WHEN 値 THEN 値列の値ごとに決める短い書き方
ELSE 値どれにも合わなかったときの値(無いと NULL)
ENDCASE の終わり

例

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 は、登録不要・無料で遊べます(それより先はブロンズ以上のプランで遊べます)。

SQL 構文一覧(使い方と例)へ戻る