基本結合・加工

条件に応じて表示内容を変えたい

このページでできること

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

employees のサンプルデータ
idnamedepartment_idsalary
1佐藤1300000
2鈴木2400000
3佐々木1350000
4高橋2400000
5田中NULL250000
6伊藤3NULL

departments

departments のサンプルデータ
idname
1営業
2開発
3人事
4広報

employees.department_id が departments.id に対応します。表は説明用です。このサイト上でSQLは実行しません。

使い方を順番に確認する練習を始めるときは、この手順に沿って進めます

使い方

  1. 未設定の条件を最初に書く
  2. 次に35万円以上の条件を書く
  3. それ以外を ELSE で分類する

結果の例

結果:6行
namesalary_label
佐藤35万円未満
鈴木35万円以上
佐々木35万円以上
高橋35万円以上
田中35万円未満
伊藤未設定
注意点

ELSE を省略し、どの条件にも合わない場合は NULL です。この例は表示だけを変え、元の月給は変更しません。

うまくいかないときに確認するエラーや想定と違う結果が出たときの確認ポイント

うまくいかないとき

表や列が存在しないエラーは、サンプルの表名・列名と自分の環境が一致しているか確認します。構文エラーはデータベース製品の違いにも注意してください。

PostgreSQLの構文を基準にしています。MySQL・SQL Server・SQLiteなどでは、一部の構文や挙動が異なります。

公式ドキュメントで詳しく確認する

同じカテゴリの項目

一覧に戻る