MySQL 求和所有钱的 SUM 函数
MySQL SUM function for summing all the money
我需要汇总底层数据库的所有资金。
我有 2 个选项可以做到这一点。
- 使用 SQL SUM() 函数求和或
- 获取内存中所有钱和金额的列表。
考虑到更好的性能,我认为使用第一个选项会更好,但我想知道是否可以安全地使用 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
在 任何 情况下都有精度问题。
我需要汇总底层数据库的所有资金。
我有 2 个选项可以做到这一点。
- 使用 SQL SUM() 函数求和或
- 获取内存中所有钱和金额的列表。
考虑到更好的性能,我认为使用第一个选项会更好,但我想知道是否可以安全地使用 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
在 任何 情况下都有精度问题。