Sql 如何在activerecord中聚合别名列?

Sql 如何在activerecord中聚合别名列?,sql,ruby,activerecord,rails-activerecord,Sql,Ruby,Activerecord,Rails Activerecord,假设有下表: 产品(id:integer,category:string,cost:float) 您希望使用activerecord执行此查询: Product.select(“成本+1000作为增量成本”).group(:category.sum('增量成本')) ActiveRecord::StatementInvalid:PG::UnfinedColumn:错误:列“增量成本”不存在 该示例非常简单,但它很好地代表了一个问题:如何将别名分配给修改后的字段并在聚合函数中使用它 我的目标是

假设有下表:

产品(id:integer,category:string,cost:float)
您希望使用
activerecord
执行此查询:

Product.select(“成本+1000作为增量成本”).group(:category.sum('增量成本'))
ActiveRecord::StatementInvalid:PG::UnfinedColumn:错误:列“增量成本”不存在
该示例非常简单,但它很好地代表了一个问题:如何将别名分配给修改后的字段并在聚合函数中使用它

我的目标是返回一个Activerecord_关系,其中可以计算别名字段(可能是组)上的聚合。问题是“分组”是有条件的,我希望保留数据管道

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

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

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

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

如果需要,只需将
Sum(cost+1000)作为增量成本
相加即可。请更具体一点?确定
产品。选择(“Sum(cost+1000)作为增量成本”)
如果您需要其他列,它们需要出现在
select
语句和
group
语句中,例如
产品。选择(“Sum(cost+1000)As incremented_cost,name”)。group(“name”)
谢谢!不幸的是,这并不是那么容易:1)在
之后。在此等待中选择
,我不能在没有调用
之前先使用
。2) 我有一种管道,所以每个记录->组->总和的成本都会增加。我不能轻易地改变顺序。@Andrea,现在还不太清楚你想通过聚合实现什么,聚合必须在之后发生。你能相应地更新你的问题吗?对于您当前描述的内容,类似于:
产品。选择(“总和(成本+1000)作为增加的成本”)。首先。增加的成本
返回增加1000
成本的总和