将多个字段与组相加会返回错误的金额(Rails 6.1)

Posted

技术标签:

【中文标题】将多个字段与组相加会返回错误的金额(Rails 6.1)【英文标题】:Summing multiple fields with group returns wrong amount (Rails 6.1) 【发布时间】:2021-12-20 00:00:40 【问题描述】:

这是我在 Rails 应用程序中执行的查询示例

sum = Model.group(:insurance_id).sum('payment + additional_payment')

但是,与我查询单个insurances 并进行计算相比,返回的insurance_id = 1sum 是错误的,即

sum_1 = Model.where(insurance_id: 1).sum(:payment)
sum_2 = Model.where(insurance_id: 1).sum(:additional_payment)

sum != (sum_1 + sum_2) # by right, this should be equal?

其他相关信息:

paymentadditional_payment 是带有 precision: 10, scale: 2 的十进制字段 paymentadditional_payment 可以是 nil 或 0 总和之差高达千位数

非常感谢任何想法或帮助!

【问题讨论】:

【参考方案1】:

找到答案了!

添加到nil 值将返回nil,这不是我想要的。它应该将nil 值视为0。所以我只是像这样使用coalesce

sum = Model.group(:insurance_id).sum('coalesce(payment, 0) + coalesce(additional_payment, 0)')

这解决了对可空值求和的问题。希望这对将来的其他人有所帮助!

【讨论】:

在 SQL 领域是null

以上是关于将多个字段与组相加会返回错误的金额(Rails 6.1)的主要内容,如果未能解决你的问题,请参考以下文章

Rails:如果表单返回验证错误,则保持 JSON 表单字段填充

Delphi 的DBGridEH 中,几个列栏位值相加

oracle如何将多个值放在一个字段里面 用逗号隔开

Rails 3:如何汇总多个集合选择?

两个数组如何对应相加js

使用计算字段连接同一个表会返回“重复”行 [关闭]