基本语法
CASE WHEN语句是Hive中的条件语句之一,通常用于根据给定的条件从多个分支中选择一个返回结果。它的基本语法如下
SELECT
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
WHEN condition3 THEN result3
…
ELSE result
END
FROM table_name
其中,condition是一个布尔表达式,如果成立,就返回对应的结果;如果所有条件均不成立,则返回ELSE中的结果。我们也可以省略掉ELSE关键字,这样如果所有条件均不成立,则返回NULL。
注意:省略掉ELSE关键字,这样如果所有条件均不成立,则返回NULL。
在使用过程中会经常忘记ELSE处理,以为不写ELSE,不满足条件的会正常显示,其实是没有了。
二、常用场景
CASE WHEN语句通常用于数据转换、分类和聚合等场景中。
- 数据转换
在数据仓库中,我们经常需要将原始数据转换成适合分析和处理的格式。例如,在某个表中,可能存在分数字段,我们需要将分数字段转换成等级字段,可以使用CASE WHEN语句:
SELECT
student_name,
score,
CASE
WHEN score >= 90 THEN ‘A’
WHEN score >= 80 THEN ‘B’
WHEN score >= 70 THEN ‘C’
WHEN score >= 60 THEN ‘D’
ELSE ‘F’
END AS grade
FROM student_scores;
根据分数字段(score)生成等级字段(grade)。
- 分类汇总
CASE WHEN语句还可以用于分类汇总。例如,我们需要查询每个部门中工资最高的员工:
SELECT
department_name,
MAX(
CASE
WHEN salary >= 5000 THEN salary
ELSE NULL
END
) AS max_salary
FROM employee
GROUP BY department_name;
根据部门名称分组,然后在每个组中选择工资最高的员工。
3.复杂的条件过滤筛选。
where
(case when a ‘%语文%’ then b<>‘三年级’ else 1=1 end);
过滤掉a包含语,而且b不是三年级的数据,注意else内容不能少,否则剩下的内容被过滤掉了~
注意点:
then之后不要写成条件表达式了
THEN result1 。 不要写成条件表达式了
select (case when a ‘%语文%’ then b<>‘三年级’ then b=‘四年级’ end)
then b=‘四年级’ 这是一个条件表达式,只会返回True或者False。THEN之后是值。