跳到主要内容

when:条件分支判断

速查结论

CASE WHEN expr1 THEN expr2 [WHEN expr3 THEN expr4] [ELSE expr5] END* 是 Spark SQL 中用于多条件分支判断与返回值选择的函数。

语法

CASE WHEN expr1 THEN expr2 [WHEN expr3 THEN expr4]* [ELSE expr5] END

参数说明

参数说明
expr1, expr3分支条件表达式,应为布尔类型
expr2, expr4, expr5分支值表达式和 else 值表达式,应该类型相同或可以强制转换为共同类型

示例

> SELECT CASE WHEN 1 > 0 THEN 1 WHEN 2 > 0 THEN 2.0 ELSE 1.2 END;
1.0
> SELECT CASE WHEN 1 < 0 THEN 1 WHEN 2 > 0 THEN 2.0 ELSE 1.2 END;
2.0
> SELECT CASE WHEN 1 < 0 THEN 1 WHEN 2 < 0 THEN 2.0 END;
NULL

常见报错与避坑指南

  • 分支类型不一致:所有 THEN 和 ELSE 分支的返回值类型必须兼容或可强制转换为共同类型。如果混用 INT 和 STRING 且无法隐式转换,会抛出 AnalysisException。
  • 缺少 ELSE 子句:当所有 WHEN 条件都不满足且没有 ELSE 时,返回 NULL。如果业务需要默认值,务必添加 ELSE 子句。
  • 条件顺序影响结果:CASE WHEN 按顺序依次判断,首个匹配的条件将作为结果。确保条件顺序符合业务逻辑。

Since: 1.0.1

📱关注公众号

「数据仓库技术」文章同步更新,不错过每一篇干货

微信公众号二维码
💬加群交流

备注「数据仓库技术」加入社群,每日一道大厂SQL真题

交流微信二维码

你可能还想看