MySQL SUM功能用于汇总所有资金

时间:2016-07-13 20:01:05

标签: java mysql mariadb

我需要从基础数据库中总结所有资金。

我有2个选项可以做到这一点。

  1. 使用SQL SUM()函数对其进行求和或
  2. 获取所有钱和内存总和的清单。
  3. 我认为最好使用第一个选项考虑更好的性能,但我想知道是否可以安全地使用SUM函数来总结货币金额而不会失去精度

    如果是第二个选项,我会使用Java的BigDecimal来代表钱。

3 个答案:

答案 0 :(得分:3)

这取决于您使用的数据类型。 如果你正在使用浮点数,那么在mysql中会有一些精度丢失(参见herehere),如果你使用的是小数,那么你应该没问题。

答案 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任何情况下都存在精确问题。