简单case when函数:
等同于,使用case when条件表达式函数实现:
then后边的值与else后边的值类型应一致,否则会报错。如下:
‘优’和0数据类型不一致则报错:
[err] ora-00932: 数据类型不一致: 应为 char, 但却获得 number
简单case when函数只能应对一些简单的业务场景,而case when条件表达式的写法则更加灵活。
case when条件表达式函数:类似java中的if else语句。
格式:
condition是一个返回布尔类型的表达式,如果表达式返回true,则整个函数返回相应result的值,如果表达式皆为false,则返回else后result的值,如果省略了else子句,则返回null。
下面介绍几种常用场景。
场景1:有分数score,score<60返回不及格,score>=60返回及格,score>=80返回优秀
注意:如果你想判断score是否null的情况,when score = null then ‘缺席考试’,这是一种错误的写法,正确的写法应为:
场景2:现老师要统计班中,有多少男同学,多少女同学,并统计男同学中有几人及格,女同学中有几人及格,要求用一个sql输出结果。
表结构如下:其中stu_sex字段,0表示男生,1表示女生。
stu_code | stu_name | stu_sex | stu_score |
---|---|---|---|
xm | 小明 | 0 | 88 |
xl | 小磊 | 0 | 55 |
xf | 小峰 | 0 | 45 |
xh | 小红 | 1 | 66 |
xn | 晓妮 | 1 | 77 |
xy | 小伊 | 1 | 99 |
输出结果如下:
male_count | female_count | male_pass | female_pass |
---|---|---|---|
3 | 3 | 1 | 3 |
场景3:经典行转列,并配合聚合函数做统计
现要求统计各个城市,总共使用了多少水耗、电耗、热耗,使用一条sql语句输出结果
有能耗表如下:其中,e_type表示能耗类型,0表示水耗,1表示电耗,2表示热耗
e_code | e_value | e_type |
---|---|---|
北京 | 28.50 | 0 |
北京 | 23.51 | 1 |
北京 | 28.12 | 2 |
北京 | 12.30 | 0 |
北京 | 15.46 | 1 |
上海 | 18.88 | 0 |
上海 | 16.66 | 1 |
上海 | 19.99 | 0 |
上海 | 10.05 | 0 |
输出结果如下:
e_code | water_energy | ele_energy | heat_energy |
---|---|---|---|
北京 | 40.80 | 38.97 | 28.12 |
上海 | 48.92 | 16.66 | 0 |
场景4:case when中使用子查询
根据城市用电量多少,计算用电成本。假设电能耗单价分为三档,根据不同的能耗值,使用相应价格计算成本。
价格表如下:
p_price | p_level | p_limit |
---|---|---|
1.20 | 0 | 10 |
1.70 | 1 | 30 |
2.50 | 2 | 50 |
当能耗值小于10时,使用p_level=0时的p_price的值,能耗值大于10小于30使用p_level=1时的p_price的值…
场景5:结合max聚合函数
case when 函数使用起来简单易懂,此篇文章只作了简单的使用介绍,还需在实际工作中根据业务场景不同来灵活使用。
到此这篇关于详解sql之case when具体用法的文章就介绍到这了,更多相关sql case when内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!