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ではない値を返します。