三分钟搞懂SQL的Case函数

前言作用: 可以使用它们在数据库进行判断功能,跟代码中的if...else功能一样.但是,它们又存在差异,下面就来讲它们的具体作用和差别 。
一: 使用语法   (一)普通case函数
CASE  <表达式>   WHEN <值1> THEN <操作>   WHEN <值2> THEN <操作>   ...   ELSE <操作>END    (二 )搜索case函数
CASE    WHEN <条件1> THEN <命令>    WHEN <条件2> THEN <命令>    ...    ELSE commandsEND作用一: 结合分组统计数据   需求: 将下图的数据按照"洲"进行统计总人数

三分钟搞懂SQL的Case函数

文章插图
源数据
   (一)方式一: 使用普通的case函数进行统计
  select (  case name    when '中国' then '亚洲'   when '日本' then '亚洲'   when '美国' then '北美洲'   when '加拿大' then '北美洲'  else '其他' end  ) 洲,  sum(population) 总数   from t_country  GROUP BY  (  case name    when '中国' then '亚洲'   when '日本' then '亚洲'   when '美国' then '北美洲'   when '加拿大' then '北美洲'  else '其他' end  )  统计结果:
三分钟搞懂SQL的Case函数

文章插图
统计结果
   (二)方式二: 使用搜索的case函数进行统计
 select (  case    when name in('中国','日本') then '亚洲'  when name in('美国','加拿大') then '北美洲'  else '其他' end ) 洲, sum(population) 总数  from t_country GROUP BY (  case    when name in('中国','日本') then '亚洲'  when name in('美国','加拿大') then '北美洲'  else '其他' end )  统计结果
三分钟搞懂SQL的Case函数

文章插图
统计结果
作用二: 分条件更新字段值   (一)需求: 将工资低于3000的员工涨幅工资20%,工资等于高于3000的员工涨幅8%,数据如下:
三分钟搞懂SQL的Case函数

文章插图
源数据
   可能看到此需求,有人第一想法就是直接通过如下两条update语句直接更新:
update t_salary set salary = salary + (salary * 0.2) where salary < 3000;update t_salary set salary = salary + (salary * 0.08) where salary >= 3000;  但是,如果是这样执行的话实际上会存在问题,比如:原来工资在2900的员工,执行完第一条语句后工资会变成3480,此时,再执行第二条更新语句,因为满足工资大于三千,则又会去添加多8%的工资,这样明显就是不符合我们的需求的,所以,如果想完成这个需求,又不想写太复杂的sql,可以通过case函数完成这个功能 。
   (二)使用搜索的case函数进行分条件修改(此处不能使用简单case函数,因为简单case函数不能判断带范围的条件)
update t_salary set  salary =  (  case    when salary < 3000 then salary + salary * 0.2   when salary >= 3000 then salary + salary * 0.08   else salary   end )   (三)分条件修改后结果
三分钟搞懂SQL的Case函数

文章插图
结果
作用三: 检查表中字段值是否一致   (一)需求: 判断两个表中name字段值是否一致,并返回结果,数据如下:


推荐阅读