简单的使用CASE WHEN
CASE SCORE WHEN 'A' THEN '优' ELSE '不及格' ENDCASE SCORE WHEN 'B' THEN '良' ELSE '不及格' ENDCASE SCORE WHEN 'C' THEN '中' ELSE '不及格' END
上面的sql等同于
CASE SCORE WHEN 'A' THEN '优' WHEN 'B' THEN '良' WHEN 'C' THEN '中' ELSE '不及格' END
THEN
后面的值与ELSE
后面的值类型应一致,否则报错:
CASE SCORE WHEN 'A' THEN '优' ELSE 0 END
'优’和0不一致会报错。
引申出几种常用场景
场景1 :有分数score,score<60返回不及格,score>=60返回及格,score>=80返回优秀
SELECTSTUDENT_NAME,(CASE WHEN score < 60 THEN '不及格'WHEN score >= 60 AND score < 80 THEN '及格'WHEN score >= 80 THEN '优秀'ELSE '异常' END) AS REMARKFROMTABLE
场景2:现老师要统计班中,有多少男同学,多少女同学,并统计男同学有几人及格,女同学有几人及格,要求写一个sql输出结果。表结构如下,stu_sex,0表示男生,1表示女生
select sum(case when stu_sex=0 then 1 else 0) male_sum,sum(case when stu_sex=1 then 1 else 0) female_sum,sum(case when stu_sex=0 and stu_score>=60 then 1 else 0) male_pass,sum(case when stu_sex=1 and stu_score>=60 then 1 else 0) female_passfrom students
结果
场景3:经典行转列,并配合聚合函数做统计
现要求统计各个城市,总共使用了水耗、电耗、热耗,使用一条sql输出
有能耗表如下:其中,E_TYPE表示能耗类型,0表示水耗,1表示电耗,2表示热耗
select E_CODE, E_VALUE,(case when E_TYPE = 0 then E_VALUE ELSE 0 END) WATER_ENERGY, -- 水能(case when E_TYPE = 1 then E_VALUE ELSE 0 END) ELE_ENERGY,-- 电能(case when E_TYPE = 2 then E_VALUE ELSE 0 END) HEAT_ENERGY -- 热能from ENEGEY group by E_CODE
输出结果:
场景4:CASE WHEN中使用子查询
根据城市用电量多少,计算用电成本。假设电能耗单价为三挡,根据不同的能耗值,使用相应价格计算成本。
价格表如下:
我只转了前面几个实用且效率会比较高的例子,觉得这篇文章解释的很到位,博客原文在这里
博客转自:/rongtaoup/article/details/82183743