標準的なSQLのCASE
式には2つの形式があります。「シンプル」形式は、左から右に各値の式を検索し、式と等しいものを見つけるまで続けます:
CASE expression
WHEN value THEN result
[ WHEN ... ]
[ ELSE result ]
END
一致する値の結果が返されます。一致が見つからない場合、ELSE
句が存在すればその結果が返され、存在しない場合はnullが返されます。
例:
SELECT a,
CASE a
WHEN 1 THEN 'one'
WHEN 2 THEN 'two'
ELSE 'many'
END
「検索」形式は、各ブール条件を左から右に評価し、trueのものを見つけたらその結果を返します:
CASE
WHEN condition THEN result
[ WHEN ... ]
[ ELSE result ]
END
条件がtrueでない場合、ELSE
句が存在すればその結果が返され、存在しない場合はnullが返されます。
例:
SELECT a, b,
CASE
WHEN a = 1 THEN 'aaa'
WHEN b = 2 THEN 'bbb'
ELSE 'ccc'
END
IF式には2つの形式があり、一つはtrue_valueのみを提供し、もう一つはtrue_valueとfalse_valueの両方を提供します:
if(condition, true_value)
条件がtrueの場合はtrue_value
を評価して返し、そうでない場合はnullを返し、true_value
は評価されません。
if(condition, true_value, false_value)
条件がtrueの場合はtrue_value
を評価して返し、そうでない場合はfalse_value
を評価して返します。
以下のIF
とCASE
の式は同等です:
SELECT
orderkey,
totalprice,
IF(totalprice >= 150000, 'High Value', 'Low Value')
FROM tpch.sf1.orders;
SELECT
orderkey,
totalprice,
CASE
WHEN totalprice >= 150000 THEN 'High Value'
ELSE 'Low Value'
END
FROM tpch.sf1.orders;