MySQL 求和所有钱的 SUM 函数

MySQL SUM function for summing all the money

我需要汇总底层数据库的所有资金。

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

  1. 使用 SQL SUM() 函数求和或
  2. 获取内存中所有钱和金额的列表。

考虑到更好的性能,我认为使用第一个选项会更好,但我想知道是否可以安全地使用 SUM 函数对货币金额求和而不丢失精度 .

如果它是第二个选项,我会使用 Java 的 BigDecimal,它用于表示金钱。

https://msdn.microsoft.com/en-us/library/ms187810.aspx

Returns the summation of all expression values in the most precise expression data type.

SUM 不会像您的本地处理器那样失去精度,您可以安全地使用它。

编辑:

我错误地发布了一些 T-SQL 文档,这里是 mySQL 文档:

http://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html

The SUM() and AVG() functions return a DECIMAL value for exact-value arguments (integer or DECIMAL), and a DOUBLE value for approximate-value arguments (FLOAT or DOUBLE).

与T-SQL相同,它会选择最精确的数据类型。

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

如果您使用 DECIMAL(m, 2)(假设 您的 货币有 2 个小数位),MySQL 的 SUM() 将更准确且更快而不是获取所有行,将它们铲到客户端,然后使用类似的库进行等效的运算。

AVG 任何 情况下都有精度问题。