目前Rails中的sum函数返回0.0,如果提供的列数据为null
=============================================== =============================
例如: 表名:价格
id | name | Cost
-----------------
1 | A | 1200
2 | A | 2500
3 | A | 3000
4 | B | 5000
5 | B | 7000
6 | C |
现在,
Price.group(:name).sum(:cost)
返回6700
,12000
,0.0
,而不是6700
,12000
,nil
。
所以这里我想要nil,如果给定的列值是'null'或空
答案 0 :(得分:2)
SUM
忽略空值,因此NULL
的值始终为0
,zero + nothing
为0
为了克服这个问题,我使用了以下条件:
Price.where("cost IS NOT NULL).group(:name).sum(:cost)
此请求将获得非空成本值并将它们相加。之后,我可以填写NULL
其他记录的费用列。
通过这种方式,我可以确保如果费用实际为0.0
,那么我将sum(cost)
设为0.0
而不是NULL
。
答案 1 :(得分:0)
由于the implementation of sum
in Rails,在类型转换之前无法获取值。
但是,您可以通过使用原始SQL选择值来获取预期值:
Price.group(:name).select('name, sum(cost) AS total_cost')