​case when then else end​​ 可以像java中的if一样条件显示

第一种方式:

case column when value1 then result
when value2 then result
else result
end

第二种方式:

case when condition1 then result1
when condition2 then result2
else result
end

场景1:有分数score,score<60返回不及格,score>=60返回及格,score>=80返回优秀

SELECT
STUDENT_NAME,
(CASE WHEN score &lt; 60 THEN &#39;不及格&#39;
WHEN score &gt;&#61; 60 AND score &lt; 80 THEN &#39;及格&#39;
WHEN score &gt;&#61; 80 THEN &#39;优秀&#39;
ELSE &#39;异常&#39; END) AS REMARK
FROM
TABLE

场景2:现老师要统计班中,有多少男同学,多少女同学,并统计男同学中有几人及格,女同学中有几人及格,要求用一个SQL输出结果。

SELECT
count(CASE WHEN STU_SEX &#61; 0 THEN 1 ELSE 0 END) AS MALE_COUNT,
count(CASE WHEN STU_SEX &#61; 1 THEN 1 ELSE 0 END) AS FEMALE_COUNT,
count(CASE WHEN STU_SCORE &gt;&#61; 60 AND STU_SEX &#61; 0 THEN 1 ELSE 0 END) AS MALE_PASS,
count(CASE WHEN STU_SCORE &gt;&#61; 60 AND STU_SEX &#61; 1 THEN 1 ELSE 0 END) AS FEMALE_PASS
FROM
THTF_STUDENTS

场景3:经典行转列,并配合聚合函数做统计

现要求统计各个城市,总共使用了多少水耗、电耗、热耗,使用一条SQL语句输出结果

SELECT
E_CODE,
SUM(CASE WHEN E_TYPE &#61; 0 THEN E_VALUE ELSE 0 END) AS WATER_ENERGY,--水耗
SUM(CASE WHEN E_TYPE &#61; 1 THEN E_VALUE ELSE 0 END) AS ELE_ENERGY,--电耗
SUM(CASE WHEN E_TYPE &#61; 2 THEN E_VALUE ELSE 0 END) AS HEAT_ENERGY--热耗
FROM
THTF_ENERGY_TEST
GROUP BY
E_CODE

场景4:CASE WHEN中使用子查询

根据城市用电量多少,计算用电成本。假设电能耗单价分为三档,根据不同的能耗值,使用相应价格计算成本。

CASE WHEN energy &lt;&#61; (SELECT P_LIMIT FROM TABLE_PRICE WHERE P_LEVEL &#61; 0) THEN (SELECT P_PRICE FROM TABLE_PRICE WHERE P_LEVEL &#61; 0)
WHEN energy &gt; (SELECT P_LIMIT FROM TABLE_PRICE WHERE P_LEVEL &#61; 0) AND energy &lt;&#61; (SELECT P_LIMIT FROM TABLE_PRICE WHERE P_LEVEL &#61; 1) THEN (SELECT P_PRICE FROM TABLE_PRICE WHERE P_LEVEL &#61; 1)
WHEN energy &gt; (SELECT P_LIMIT FROM TABLE_PRICE WHERE P_LEVEL &#61; 1) AND energy &lt;&#61; (SELECT P_LIMIT FROM TABLE_PRICE WHERE P_LEVEL &#61; 2) THEN (SELECT P_PRICE FROM TABLE_PRICE WHERE P_LEVEL &#61; 2)

场景5:结合max聚合函数

case   when  then   else  end_sql语句

注:本文参考自其他博文,但忘记是哪篇了,在此非常感谢。