Rails:如果给定的列值为null,则sum应返回nil

时间:2014-07-19 09:54:04

标签: ruby-on-rails ruby

目前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)

返回6700120000.0,而不是670012000nil

所以这里我想要nil,如果给定的列值是'null'或空

2 个答案:

答案 0 :(得分:2)

SUM忽略空值,因此NULL的值始终为0zero + nothing0

为了克服这个问题,我使用了以下条件:

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')