数据未按年龄正确设置及SQL年龄分级逻辑问题咨询
SQL问题排查与修复
原有代码错误清单
- 循环条件逻辑完全不成立:
WHILE (@Age = 14 AND @Age =25)存在逻辑矛盾,同一个数值不可能同时等于两个不同的值,同时代码未将@Age变量与records表的年龄字段关联,也没有实现遍历表内每行数据的逻辑 - 变量赋值类型错误:第一个分支误将字符串
FRESHMEN赋值给了int类型的@Age变量,会触发类型报错,应该赋值给@Level变量 - 无实际业务逻辑缺失:代码仅操作了声明的局部变量,没有将计算得到的等级结果关联到原表数据,也没有输出或更新结果的逻辑,完全无法实现按年龄匹配学生级别的需求
- 技术选型错误:批量处理表内每行数据的场景无需使用循环逻辑,使用
CASE WHEN语句更简洁高效,性能远优于循环遍历
正确实现代码
场景1:查询输出带学生级别的结果
SELECT *, CASE WHEN age BETWEEN 14 AND 16 THEN '高一' WHEN age BETWEEN 17 AND 19 THEN '高二' WHEN age BETWEEN 20 AND 22 THEN '高三' WHEN age BETWEEN 23 AND 25 THEN '大学' ELSE '未知' END AS 学生级别 FROM records;
场景2:更新原表的级别字段(需提前确认records表中已存在level字段)
UPDATE records SET level = CASE WHEN age BETWEEN 14 AND 16 THEN '高一' WHEN age BETWEEN 17 AND 19 THEN '高二' WHEN age BETWEEN 20 AND 22 THEN '高三' WHEN age BETWEEN 23 AND 25 THEN '大学' ELSE '未知' END;
内容的提问来源于stack exchange,提问作者Clieve Martin R Galve
相关产品推荐
相关产品推荐

