更新时间:2026-07-08 GMT+08:00
分享

CASE...WHEN

功能描述

CASE...WHEN是条件表达式,用于根据条件返回不同的值。Spark SQL支持简单CASE函数和CASE搜索函数两种形式。

语法格式

简单CASE函数:依据expression与value1的匹配结果跳转到相应的result1。

CASE expression
   WHEN value1 THEN result1
   [ WHEN value2 THEN result2 ] ...
   [ ELSE else_result ]
 END

CASE搜索函数:按指定顺序为每个WHEN子句的condition1求值。返回第一个取值为TRUE的condition1的result1。

CASE
  WHEN condition1 THEN result1 
  [ WHEN condition2 THEN result2 ] ...
  [ ELSE else_result ]
END

参数说明

参数

说明

expression

简单CASE中被比较的表达式。

WHEN value

简单CASE中,当expression等于value时,返回对应的THEN结果。

WHEN condition

CASE搜索函数中,当condition为真时,返回对应的THEN结果。

THEN result

满足条件时返回的结果。所有THEN结果的类型应一致。

ELSE else_result

所有WHEN条件都不满足时返回的结果。如省略ELSE,则返回NULL。

注意事项

  • 简单CASE函数使用等值比较(=),CASE搜索函数支持任意布尔条件。
  • CASE表达式从上到下依次判断,返回第一个满足条件的THEN结果,后续条件不再判断。
  • 所有THEN和ELSE返回值的类型应一致或可隐式转换。
  • CASE表达式可以用于SELECT列表、WHERE条件、ORDER BY、GROUP BY等任意需要表达式的地方。

示例

  • 简单CASE函数

    返回表student中的字段name及与class_id相匹配的字符。

    SELECT name,
       CASE class_id
         WHEN 1 THEN 'Class A'
         WHEN 2 THEN 'Class B'
         WHEN 3 THEN 'Class C'
         ELSE 'Other'
       END AS class_name
       FROM student; 
  • CASE搜索函数

    对表student进行查询,返回字段name及与score对应的结果,score大于等于90返回EXCELLENT,score在(80,90)之间的返回GOOD,否则返回BAD。

    SELECT name, 
      CASE
       WHEN score >= 90 THEN 'EXCELLENT' 
       WHEN 80 < score AND score < 90 THEN 'GOOD' 
       ELSE 'BAD' 
      END AS level 
      FROM student;
  • CASE在ORDER BY中使用
    SELECT name, score FROM student
       ORDER BY CASE WHEN score >= 60 THEN 0 ELSE 1 END, score DESC; 
  • CASE在聚合中使用
    SELECT class_id,
       COUNT(CASE WHEN score >= 90 THEN 1 END) AS excellent_count,
       COUNT(CASE WHEN score < 60 THEN 1 END) AS fail_count
       FROM student
       GROUP BY class_id;

相关文档