一、CASE WHEN语句基础概念
CASE WHEN语句是HiveQL语言中用于进行条件判断的一种基本语法,适用于WHERE过滤和SELECT查询中。其基本语法为:
CASE WHEN condition1 THEN result1 WHEN condition2 THEN result2 ... ELSE else_result END
其中,condition1、condition2等为条件判断式,result1、result2等为对应判断式为真时的结果,else_result为当所有条件判断式都为假时的默认结果。
二、使用CASE WHEN进行单条件判断
使用CASE WHEN进行单条件判断时,可以在SELECT语句中进行条件判断并返回结果。
例如查询employees表中salary大于1000的员工姓名及其salary值,可以使用以下代码:
SELECT name, CASE WHEN salary>1000 THEN salary ELSE NULL END as salary FROM employees;
上述代码中,当员工的salary大于1000时,返回其salary值,否则返回NULL。
三、使用CASE WHEN进行多条件判断
使用CASE WHEN进行多条件判断时,可以依次对多个条件进行判断,并分别返回不同的结果。例如根据score列的值来将students表中的学生分为“A”、“B”和“C”三个等级:
SELECT name, CASE WHEN score>90 THEN "A" WHEN score>80 THEN "B" ELSE "C" END as grade FROM students;
上述代码中,当学生的score大于90时,分为A级别,当score在80~90之间时,分为B级别,否则分为C级别。
四、CASE WHEN和GROUP BY一起使用
在GROUP BY语句中使用CASE WHEN可以方便地进行数据的分组和统计。例如对orders表中amount列的值进行分组并分为三个等级,统计每个等级的订单数量和订单总金额:
SELECT CASE WHEN amount<1000 THEN "A" WHEN amount<5000 THEN "B" ELSE "C" END as level, COUNT(*) as count, SUM(amount) as total_amount FROM orders GROUP BY CASE WHEN amount<1000 THEN "A" WHEN amount<5000 THEN "B" ELSE "C" END;
上述代码中,首先将amount值使用CASE WHEN函数分为三个等级(1000以下、1000~5000、5000以上),再按照等级进行GROUP BY,统计每个等级的订单数量和总金额。
五、CASE WHEN和HAVING一起使用
HAVING语句可以在GROUP BY语句之后进行过滤,可以筛选出符合特定条件的数据。使用CASE WHEN可以方便地进行复杂条件判断。例如选择orders表中每个买家的累计消费金额并按照1000为等级进行划分,在此基础上筛选出消费金额超过5000的买家:
SELECT buyer, SUM(amount) as total_amount, CASE WHEN SUM(amount)<1000 THEN "A" WHEN SUM(amount)<5000 THEN "B" ELSE "C" END as level FROM orders GROUP BY buyer HAVING CASE WHEN SUM(amount)<1000 THEN "A" WHEN SUM(amount)<5000 THEN "B" ELSE "C" END = "C"
上述代码中,首先按照买家进行GROUP BY,统计每个买家的累计消费金额,并按照1000为等级进行划分。然后使用HAVING语句筛选出消费金额超过5000的买家。