一、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的買家。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/183986.html