MySQL中对SUM()结果使用FORMAT()函数出现异常的原因排查
问题分析与解决
你遇到的问题根源是以数字开头的字段名没有用反引号包裹,导致MySQL把x.07_17和fx.07_17错误解析成了表别名乘以小数(比如x * 0.0717),而不是你实际想引用的字段。
具体原因
在MySQL中,字段名如果以数字开头(比如07_17),必须用反引号()包裹才能被正确识别为字段名。否则,MySQL会把x.07_17`解读为:
x是表别名.07_17被当作小数0.0717
所以你的SUM计算实际上变成了SUM(x * 0.0717 / (fx * 0.0717)),化简后就是SUM(1)——如果你的结果集恰好有350行,那SUM结果就是350,FORMAT之后自然显示350,这就解释了为什么你看到的是350而不是预期的350914。
修正后的SQL语句
把以数字开头的字段名用反引号包裹即可:
SELECT FORMAT(SUM(x.`07_17` / fx.`07_17`), 0) AS total;
验证逻辑
- 当字段名正确包裹后,MySQL会正确计算
x.07_17除以fx.07_17的总和,得到你预期的350914 - 再通过
FORMAT(..., 0)处理后,会输出带千位分隔符的字符串:350,914,完全符合你要的带逗号、无小数位的格式
内容的提问来源于stack exchange,提问作者twigg
相关产品推荐
相关产品推荐

