Java MySQL求和函数,用于对所有的钱求和

Java MySQL求和函数,用于对所有的钱求和,java,mysql,mariadb,Java,Mysql,Mariadb,我需要对基础DB的所有资金进行合计 我有两个选择 使用SQL SUM()函数对其进行求和或 获取内存中所有金钱和金额的列表 考虑到更好的性能,我认为使用第一个选项会更好,但我想知道是否可以安全地使用求和函数来求和货币金额,而不会失去精度 如果是第二个选项,我会使用Java的BigDecimal来表示货币 返回最精确表达式数据类型中所有表达式值的总和 SUM不会像本地处理器那样丢失精度,您可以安全地使用它 编辑: 我错误地发布了一些T-SQL文档,以下是mySQL文档: SUM()和AVG()

我需要对基础DB的所有资金进行合计

我有两个选择

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

    如果是第二个选项,我会使用Java的BigDecimal来表示货币

    返回最精确表达式数据类型中所有表达式值的总和

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

    编辑:

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

    SUM()和AVG()函数为精确值参数(整数或十进制)返回一个十进制值,为近似值参数(FLOAT或DOUBLE)返回一个双精度值


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

    这取决于您使用的数据类型。 如果您使用浮点数,mysql会丢失一些精度(请参阅和),如果您使用小数,那么您应该没问题。

    如果您使用
    十进制(m,2)
    (假设您的货币为小数点后两位),mysql的
    SUM()
    将比提取所有行并将它们铲入客户端更精确、更快,然后使用类似的库执行等效的算法


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

    我不确定,但我相信求和行为是基于求和值的数据类型。为什么不安全?许多银行系统正在使用它,并且仍在工作…当您执行select时,表将被锁定以进行插入/更新,这意味着“安全”,这是一个完全不同的数据库。如果您能够提供MySQL文档而不是T-SQL,那将更为感激。谢谢您的回答