1、case表达式:
简单CASE 表达式:
CASE sex
WHEN ‘1’ THEN ‘男’
WHEN ‘2’ THEN ‘女’
ELSE ‘其他’ END
搜索CASE 表达式:
CASE sex
WHEN ‘1’ THEN ‘男’
WHEN ‘2’ THEN ‘女’
ELSE ‘其他’ END
注解:
简单 CASE 表达式能写的条件,搜索 CASE 表达式也能写
1、排他性
2、统一返回数据类型
3、要写END
4、养成写ELSE的习惯,默认为NULL
case简单用法:
eg1:将已有编号方式转换为新的方式并统计
SELECT *,case when pref_name in (‘苏州’,‘南京’) then ‘江苏’ when pref_name = ‘合肥’ then ‘安徽’ else ‘中国’ end as district,sum(population) as sum
from test.PopTbl group by district having sum >200 order by sum
注解: mysql数据库 是先执行select子句,再执行group by的,所以拿新列group by,having也是
,sql/oracle反之
将行数据转化成列数据
eg2:用一条 SQL 语句进行不同条件的统计(聚合函数使用case)
select sum(case when sex =1 then case when population>0 then population else 0 end else 0 end) as ‘男’,sum(case when sex =2 then population else 0 end) as ‘女’,pref_name from test.PopTbl group by pref_name order by pref_name
注解:union也可
可嵌套 case when then else end 多条件约束(蕴含式)
蕴含式和逻辑与(logical product)的区别。逻辑与也是一个逻辑表达式,意思是“P 且 Q”,记作 P ∧ Q。蕴含式 P→Q
eg3:在 UPDATE 语句里进行条件分支
update test.salaries set salary = case when salary >=300000 then salary * 0.9 when salary
<250000 then salary * 1.2 else salary end where id>0
同 select 多个条件分支查询 应用范围:调换