条件に応じて表示内容を変えたい
このページでできること
CASE は上から条件を調べ、最初に真となった条件の値を返します。
SQL例の例
SELECT name,
CASE
WHEN salary IS NULL THEN '未設定'
WHEN salary >= 350000 THEN '35万円以上'
ELSE '35万円未満'
END AS salary_label
FROM employees
ORDER BY id;この例で使うサンプル表を見る共通の架空データと、練習用の表を確認します
全20項目で共通の架空データです。salary は月給(円)。NULL は未設定を表します。結果の小数点以下の表示桁数は実行環境により異なります。
employees
| id | name | department_id | salary |
|---|---|---|---|
| 1 | 佐藤 | 1 | 300000 |
| 2 | 鈴木 | 2 | 400000 |
| 3 | 佐々木 | 1 | 350000 |
| 4 | 高橋 | 2 | 400000 |
| 5 | 田中 | NULL | 250000 |
| 6 | 伊藤 | 3 | NULL |
departments
| id | name |
|---|---|
| 1 | 営業 |
| 2 | 開発 |
| 3 | 人事 |
| 4 | 広報 |
employees.department_id が departments.id に対応します。表は説明用です。このサイト上でSQLは実行しません。
使い方を順番に確認する練習を始めるときは、この手順に沿って進めます
使い方
- 未設定の条件を最初に書く
- 次に35万円以上の条件を書く
- それ以外を ELSE で分類する
結果の例
| name | salary_label |
|---|---|
| 佐藤 | 35万円未満 |
| 鈴木 | 35万円以上 |
| 佐々木 | 35万円以上 |
| 高橋 | 35万円以上 |
| 田中 | 35万円未満 |
| 伊藤 | 未設定 |
注意点
ELSE を省略し、どの条件にも合わない場合は NULL です。この例は表示だけを変え、元の月給は変更しません。
うまくいかないときに確認するエラーや想定と違う結果が出たときの確認ポイント
うまくいかないとき
表や列が存在しないエラーは、サンプルの表名・列名と自分の環境が一致しているか確認します。構文エラーはデータベース製品の違いにも注意してください。
PostgreSQLの構文を基準にしています。MySQL・SQL Server・SQLiteなどでは、一部の構文や挙動が異なります。