没有不值得去解决的问题,也没有不值得去学习的技术!

Solution for MySQL SUM Function Returning Up to 13 Decimal Places

Normal query result after the fix, with only 2 decimal places!

作者:

在

First query result, with 13 decimal places!
First query result, with 13 decimal places!
Normal query result after the fix, with only 2 decimal places!
Normal query result after the fix, with only 2 decimal places!

SQL statement:

(SELECT SUM(o_g.goods_amount) AS
amount_sum,SUM(o_g.goods_cost*o_g.goods_number) AS
cost_sum,SUM(o_g.goods_number) AS number_sum
FROM erp_order_goods AS o_g
LEFT OUTER JOIN erp_order AS o ON o_g.order_id = o.order_id
LEFT OUTER JOIN erp_goods AS g ON g.gid = o_g.goods_id
LEFT OUTER JOIN erp_brand AS b ON b.brand_id = g.brand_id WHERE
(o.add_time BETWEEN “1389715200” AND “1389772885”) AND (o.order_status=1 OR
o.order_status=2)) UNION ALL
(SELECT SUM(o_a_g.goods_change_amount) AS
amount_sum,SUM(o_a_g.goods_cost*o_a_g.goods_change_number) AS
cost_sum,SUM(o_a_g.goods_change_number) AS number_sum
FROM erp_order_after_goods AS o_a_g
LEFT OUTER JOIN erp_order_after AS o_a ON o_a_g.order_after_id = o_a.order_after_id
LEFT OUTER JOIN erp_goods AS g ON g.gid = o_a_g.goods_id
LEFT OUTER JOIN erp_brand AS b ON b.brand_id = g.brand_id WHERE
(o_a.add_time BETWEEN “1389715200” AND “1389772885”))

Solution:

Change the field type of o_a_g.goods_change_amount from float(10,2) to decimal(10,2)

关于作者 · 持续学习与技术实践

我是一名拥有 15 年以上开发经验的技术从业者,自 2013 年起持续运营个人技术博客,记录工作与个人项目中遇到的真实问题,以及解决问题过程中的探索、实践和思考。

除了技术写作,我也在持续开发和维护自己的独立项目,探索新技术和新工具在实际场景中的应用。我始终相信,没有不值得去解决的问题,也没有不值得去学习的技术。

如果这篇文章对你有所帮助,欢迎浏览博客中的其他文章,也欢迎交流技术经验与想法。

关于我  ·  GitHub  ·  邮件联系