[oracle]巧用 CASE WHEN
①巧用 CASE WHEN 进行统计
来看看如何巧用 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 进行更新
现在某公司员人工资信息表如下:
现在公司出台了一个奇葩的规定:
-
对当前工资为 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;