SQL计算中CAST转换精度丢失问题调整方法咨询
SQL预测准确率计算精度问题修复方案
问题根因
你遇到的是SQL默认整数除法的截断问题:绝大多数主流SQL方言(MySQL、SQL Server、PostgreSQL等)中,两个INT类型的数值执行除法运算时,默认返回整数结果,会直接舍弃全部小数位。
你给出的案例中,2596和2504均为整数,运算时会先执行整数除法得到结果1,再转换为decimal(5,2)类型,最终输出就是错误的1.00。
修复方案
有两种通用的调整方式,兼容性覆盖绝大多数数据库:
- 方案1:通过乘1.0隐式转换数值类型(写法最简单)
在求和结果后先乘1.0,将整数转为小数类型后再做除法,避免整数截断:
CAST(SUM(p.QTY) * 1.0 / SUM(r.QTY) AS decimal (5,2)) AS 'Forecast Accuracy'
- 方案2:显式转换类型(兼容性最高,无隐式转换风险)
先显式把其中一个求和结果转换为decimal类型后再做除法:
CAST(CAST(SUM(p.QTY) AS decimal(10,2)) / SUM(r.QTY) AS decimal(5,2)) AS 'Forecast Accuracy'
效果验证
代入你给出的测试值:SUM(p.QTY)=2596、SUM(r.QTY)=2504,调整后运算结果为2596/2504≈1.0367,四舍五入保留2位小数后即可得到正确的1.04。
内容的提问来源于stack exchange,提问作者JeremyU
相关产品推荐
相关产品推荐

