nullジマ

CASE WHEN / NULL処理

CASE WHENは条件によって返す値を変えるSQLのif-elseです。NULLは「不明な値」なので専用の扱いが必要です。 条件付き変換とNULLの扱い

基本文法

SELECT CASE
  WHEN condition1 THEN value1
  WHEN condition2 THEN value2
  ELSE default_value
END AS result_value
FROM table_name;

COALESCE(column_name, fallback_value)
NULLIF(value1, value2)

例題

給与等級の分類

CASE WHENで給与の範囲に応じた等級を返します。

SELECT name, salary,
  CASE
    WHEN salary >= 7000000 THEN 'S'
    WHEN salary >= 6000000 THEN 'A'
    WHEN salary >= 5000000 THEN 'B'
    ELSE 'C'
  END AS salary_grade
FROM employees
ORDER BY salary DESC;

COALESCEでNULLを置き換える

左から最初のNULLではない値を返します。部署IDがNULLならunassignedを表示します。

SELECT name,
  COALESCE(CAST(department_id AS TEXT), 'unassigned') AS department
FROM employees;

NULLIFで特定の値をNULLにする

NULLIF(a, b)は両方の値が等しい場合にNULLを返します。条件付き集計にはCASEも使えます。

SELECT name, salary,
  salary / NULLIF(salary, 0) AS ratio
FROM employees;

SELECT
  COUNT(CASE WHEN department_id = 1 THEN 1 END) AS development_count,
  COUNT(CASE WHEN department_id = 2 THEN 1 END) AS marketing_count
FROM employees;

知っておくと便利なこと

  • CASEはSELECT、WHERE、ORDER BYなどで使えます。
  • NULLとの比較にはIS NULLまたはIS NOT NULLを使います。NULL = NULLの結果はUNKNOWNです。
  • COALESCE(a, b, c)は、左から最初のNULLではない値を返します。