学习交流,欢迎留言
今天学习SQL,碰到了一个小问题,到底是“case 字段名 when……then……”还是“case when 条件判断……then……”呢?
不弄明白了不舒服斯基……打倒拦路虎fighting!
case when是流程控制语句,不过通常习惯性称为case when函数。
- case when有两种格式
格式一:CASE 字段名称 WHEN 字段值 THEN 值1 ELSE 值2 END
CASE sex
WHEN ‘1’ THEN ‘男’
WHEN ‘0’ THEN ‘女’
ELSE ‘其他’
格式二:CASE WHEN 条件判断 THEN 值1 ELSE 值2 END
CASE WHEN sex = ‘1’ THEN ‘男’
WHEN sex = ‘0’ THEN ‘女’
ELSE ‘其他’ END
- 用法一:对数据进行分组
有数据如下:
![030fe37b7bbf895f21345e5db5389db4.png](https://img-blog.csdnimg.cn/img_convert/030fe37b7bbf895f21345e5db5389db4.png)
要求:统计每个国家的男性人口和女性人口数量
SELECT country,
SUM(CASE WHEN sex = '1' THEN population ELSE 0 END)as '男性人口',
SUM(CASE WHEN sex = '2' THEN population ELSE 0 END)as '女性人口'
FROM Table_A
GROUP BY country;(注意这里除了sum聚合函数外,select子句中所有的字段都出现了哦,group by字段的用法注意了,我之前的文章中有写到哦~)
数据芝麻糊:group by、where、having用法及顺序zhuanlan.zhihu.com- 用法二:将行转列,并配合聚合函数做统计(最终结果表现为将一维表格转换为二维表格)
下面这个例子引用自:
SQL之CASEWHEN用法详解__Rt-CSDN博客_sqlcasewhen用法blog.csdn.net![c18e5b5dbc88ab8c2c7ba6dde6e48730.png](https://img-blog.csdnimg.cn/img_convert/c18e5b5dbc88ab8c2c7ba6dde6e48730.png)
有能耗表如下:其中,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
现在,要求统计各个城市,总共使用了多少水耗、电耗、热耗,使用一条SQL语句输出结果
SELECT
E_CODE,
SUM(CASE WHEN E_TYPE = 0 THEN E_VALUE ELSE 0 END) AS WATER_ENERGY,
SUM(CASE WHEN E_TYPE = 1 THEN E_VALUE ELSE 0 END) AS ELE_ENERGY,
SUM(CASE WHEN E_TYPE = 2 THEN E_VALUE ELSE 0 END) AS HEAT_ENERGY
FROM THTF_ENERGY_TEST
GROUP BY E_CODE
输出结果如下:
E_CODE WATER_ENERGY ELE_ENERGY HEAT_ENERGY
北京 40.80 38.97 28.12
上海 48.92 16.66 0
总结一句:结合工作当中的具体场景,灵活使用吧,就这样么么哒~~~