[oracle]巧用 CASE WHEN

①巧用 CASE WHEN 进行统计
 
来看看如何巧用 CASE WHEN 进行定制化统计,假设我们有如下的需求,希望根据左边各个市的人口统计每个省的人口:
[oracle]巧用 CASE WHEN

 

 

使用 CASE WHEN 如下:
SELECT CASE pref_name
      WHEN '长沙' THEN '湖南' 
      WHEN '衡阳' THEN '湖南'
      WHEN '海口' THEN '海南' 
      WHEN '三亚' THEN '海南'
    ELSE '其他' END AS district,
    SUM(population)
FROM PopTbl
GROUP BY district;

 

 
②巧用 CASE WHEN 进行更新
 
现在某公司员人工资信息表如下:
[oracle]巧用 CASE WHEN

 

 

现在公司出台了一个奇葩的规定:
  • 对当前工资为 1 万以上的员工,降薪 10%。
  • 对当前工资低于 1 万的员工,加薪 20%。
 
一些人不假思索可能写出了以下的 SQL:

--条件1
UPDATE Salaries
SET salary = salary * 0.9 WHERE salary >= 10000;
--条件2
UPDATE Salaries
SET salary = salary * 1.2
WHERE salary < 10000;

 

 
这么做其实是有问题的, 什么问题,对小明来说,他的工资是 10500,执行第一个 SQL 后,工资变为 10500*0.9=9450, 紧接着又执行条件 2, 工资变为了 9450*1.2=11340,反而涨薪了!
 
如果用 CASE WHEN 可以解决此类问题,如下:
 
UPDATE Salaries
SET salary = CASE WHEN salary >= 10000 THEN salary * 0.9
WHEN salary < 10000 THEN salary * 1.2
ELSE salary END;