SQL单字段分箱:为Worker表salary字段新增salary_bin列语法错误排查
报错原因
- CASE WHEN语法使用错误:多分支判断仅需要开头写一次
CASE,结尾写一次END即可,不需要每个分支都重复写CASE关键字;且CASE表达式内部只需要返回对应值,不需要写salary_bin = 1这种赋值逻辑,整个CASE的结果直接作为字段值使用即可。 - 符号错误:每个
WHEN分支后多写了多余的逗号,最后一个分支的返回值'4漏了单引号闭合,导致语法解析失败。 - 逻辑不匹配:需求是给新增的
salary_bin字段赋值,你写的SELECT语句仅做查询,不会修改表中存储的数据。 - 字段类型不合理:分箱编号是整数,不需要用
decimal(10,2)类型,用INT即可。
正确实现SQL
步骤1:新增salary_bin字段
ALTER TABLE dbo.worker ADD salary_bin INT;
步骤2:按分箱规则更新字段值
UPDATE dbo.worker SET salary_bin = CASE WHEN salary >= 0 AND salary < 80000 THEN 1 WHEN salary >= 80000 AND salary < 100000 THEN 2 WHEN salary >= 100000 AND salary < 300000 THEN 3 WHEN salary >= 300000 AND salary <= 500000 THEN 4 END;
验证结果
执行以下查询可以查看分箱结果:
SELECT worker_id, Salary, salary_bin FROM dbo.worker;
最终输出结果和规则完全匹配:
| worker_id | Salary | salary_bin |
|---|---|---|
| 1 | 100000 | 3 |
| 2 | 80000 | 2 |
| 3 | 300000 | 4 |
| 4 | 500000 | 4 |
| 5 | 500000 | 4 |
| 6 | 200000 | 3 |
| 7 | 75000 | 1 |
| 8 | 90000 | 2 |
内容的提问来源于stack exchange,提问作者noob
相关产品推荐
相关产品推荐

