如何根据薪资规则更新EMPSAL表的INCENTIVES列?
解决方案
用SQL的CASE语句来实现多条件分支更新是最直接的方式,代码如下:
UPDATE EMPSAL SET INCENTIVES = CASE WHEN SALARY < 1000 THEN SALARY * 1.05 WHEN SALARY < 5000 THEN SALARY * 1.07 WHEN SALARY > 6000 THEN SALARY ELSE INCENTIVES -- 处理题目未明确的边界值(如5000、6000),保持原有值不变 END;
细节解释
- 条件顺序很重要:
CASE是从上到下匹配条件的,所以必须把范围更小的SALARY < 1000放在SALARY < 5000前面,不然前者会被后者覆盖,得不到正确结果。 - 边界值处理:题目没说明
SALARY=5000和SALARY=6000的情况,这里我用ELSE INCENTIVES让这些行的INCENTIVES保持原来的NULL,如果有特殊需求,你可以直接修改这个分支的逻辑。 - 计算简化:把
SALARY + (SALARY * 0.05)简化成SALARY * 1.05,写法更简洁,执行效率也一样。
执行后的数据结果
更新完成后,表数据会变成这样:
| ID | NAME | SALARY | INCENTIVES |
|---|---|---|---|
| 1 | ABHI | 500 | 525 |
| 2 | BABY | 600 | 630 |
| 3 | CHARAN | 3000 | 3210 |
| 4 | DHANA | 4000 | 4280 |
| 5 | EMO | 5000 | NULL |
| 6 | FARAN | 6000 | NULL |
| 7 | GEO | 7000 | 7000 |
| 8 | JAHANGEER | 8000 | 8000 |
内容的提问来源于stack exchange,提问作者Harish Kumar
相关产品推荐
相关产品推荐

