-- 简单CASE表达式CASE sex
WHEN1THEN'男'WHEN2THEN'女'ELSE'保密'END-- 搜索CASE表达式CASEWHEN sex=1THEN'男'WHEN sex=2THEN'女'ELSE'保密'END
注意事项:
各分支返回的数据类型必须一致;
结尾一定要写 END;
养成写 ELSE 子句的习惯(否则返回 NULL);
二、 常用场景
1,按属性分组统计
如:已有全国各市区人口数,统计各省总人口数
id
city
population
1
南昌市
656
2
九江市
454
3
宜春市
495
4
合肥市
800
5
芜湖市
373
6
蚌埠市
330
7
长沙市
1005
8
株洲市
390
9
北京市
2185
province
总人口
江西省
1605
安徽省
1503
湖南
1395
其它
2185
SELECTCASEWHEN city IN('南昌市','九江市','宜春市')THEN'江西省'WHEN city IN('合肥市','芜湖市','蚌埠市')THEN'安徽省'WHEN city IN('长沙市','株洲市')THEN'湖南'ELSE'其它'ENDAS province,SUM(population)AS'总人口'FROM`city_pop`GROUPBY province
// group by 为严格模式(sql_mod=ONLY_FULL_GROUP_BY)时,// select查询的列,要么在group by中声明,要么通过聚合函数包装(此处用了max)SELECT name,CASEWHENCOUNT(*)>1THENMAX(CASEWHEN flag =1THEN club ELSENULLEND)ELSEMAX(club)ENDAS main_club
FROM club
GROUPBY name
三、CASE表达式出现的位置
作为表达式,在执行时会被判断为一个固定值,因此不仅可以在SELECT子句中使用,还可以在WHERE子句、GROUP BY 子句、ORDER BY 子句中使用,它甚至可以写在聚合函数内部。 简单点来说,在能写列名和常量的地方,通常都可以写CASE表达式。
作为表达式,在执行时会被判断为一个固定值,因此不仅可以在SELECT子句中使用,还可以在WHERE子句、GROUP BY 子句、ORDER BY 子句中使用,它甚至可以写在聚合函数内部。如:每个人可以参加一个或多个俱乐部,当某人参加多个俱乐部时,需要用flag=1设置主俱乐部,默认flag=0。如:工资20000以上员工降薪10%;工资10000以下员工加薪20%如:已有全国各市区人口数,统计各省总人口数。如:按姓名和学科汇总成绩。