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真题
