我想根据模型中的第二个变量计算我模型中某个变量的加权平均值,并且无法通过ActiveRecord找到一种方法。在聚合函数之前对ActiveRecord对象执行行操作
class Employer < ActiveRecord::Base
attr_accessible :name, :number_of_employees, :average_age
def self.wt_avg_age
#return sum(number_of_employee * average_age)/sum(number_of_employees)
end
end
在直SQL,我会用:
SELECT id, SUM(number_of_employees*average_age)/SUM(number_of_employees)
FROM employer
GROUP BY name
我可以在一个雄辩的方式(即执行像这样的一个ActiveRecord关系,没有拉下独立阵列和迭代通过每一个记录得到我的分子)?我尝试过使用.select(),.pluck()和sum()没有任何运气的不同组合。我无法让ActiveRecord对象执行sumproduct。
为什么你要使用的对象模型,其中简单sql查询会做什么?为这项工作使用正确的工具。 –
'id'是唯一的。如果你用'id'进行分组,你就不会完成任何事情 - 它相当于'SELECT number_of_employees * average_age/number_of_employees FROM employer'。或许还有别的东西可以分组,或者这应该是单排结果? – PinnyM
我编造了这个例子,所以我忽略了这个。我现在正在按名称分组。我应该为每个名字返回一个记录。 – RedRobin2202