如何在activerecord中聚合别名列?

时间:2015-03-16 14:52:45

标签: sql ruby activerecord rails-activerecord

假设有下表:

 Product(id:integer, category:string, cost:float)

并且您希望使用activerecord执行此查询:

Product.select("cost + 1000 AS incremented_cost").group(:category).sum('incremented_cost')

ActiveRecord::StatementInvalid: PG::UndefinedColumn: ERROR:  column "incremented_cost" does not exist

该示例非常简化,但它很好地代表了问题:如何为修改后的字段分配别名并将其用于聚合函数?

我的目标是返回一个Activerecord_Relation,它可以在别名字段上计算聚合,可能在一个组上。问题是“分组”是有条件的,我想保留数据管道。

select方法不起作用,因为它不会更改关系的字段名称。如果使用“AS”,则可以访问别名(请参阅链接)。但是它在聚合函数中不起作用。 请参阅:http://apidock.com/rails/v4.1.8/ActiveRecord/QueryMethods/select

使用#inject对我来说这不是一个好的解决方案,我不想处理数组。

例如,这段代码给出了正确的结果,但对我来说这不是一个好的解决方案:

Product.select("cost + 1000 AS incremented_cost").inject(0) do |acc, record|
   acc + record.incremented_cost
end    

0 个答案:

没有答案