我需要从基础数据库中总结所有资金。
我有2个选项可以做到这一点。
我认为最好使用第一个选项考虑更好的性能,但我想知道是否可以安全地使用SUM函数来总结货币金额而不会失去精度。
如果是第二个选项,我会使用Java的BigDecimal来代表钱。
答案 0 :(得分:3)
答案 1 :(得分:2)
https://msdn.microsoft.com/en-us/library/ms187810.aspx
以最精确的表达式数据类型返回所有表达式值的总和。
SUM不会因本地处理器而失去精度,您可以安全地使用它。
编辑:
我错误地发布了一些T-SQL文档,这里是mySQL文档:
http://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html
SUM()和AVG()函数返回精确值参数的DECIMAL值(整数或DECIMAL),以及近似值参数的DOUBLE值(FLOAT或DOUBLE)。
与T-SQL完全相同,它将选择最精确的数据类型。
答案 2 :(得分:2)
如果您使用DECIMAL(m, 2)
(假设您的货币为2位小数),MySQL的SUM()
将比获取所有行更准确,更快,将它们拖入客户端,然后使用类似的库进行等效算法。
AVG
在任何情况下都存在精确问题。