CASE

標準的な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

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を評価して返します。

以下のIFCASEの式は同等です:

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;