使用ActiveRecord查询获取一列的总和乘以另一列的总和

时间:2014-04-01 03:34:09

标签: sql ruby-on-rails database aggregate-functions rails-activerecord

假设我有一个包含整数列no_of_unitsaverage_revenue_per_unit的表。要获得任何一行的总收入,我只需要计算no_of_units * average_revenue_per_unit - 足够简单。但是,如果我想计算整个表的总收入呢?

显而易见的方法是:

total_no_of_units = TableName.sum(:units)
overall_average_revenue = TableName.average(:revenue_per_unit)
total_revenue = total_no_of_units * overall_average_revenue

但是不得不使用两个单独的SQL查询。有没有办法只用一个链式ActiveRecord查询就可以做到这一点?或者我可以(并且应该)使用原始SQL吗?

编辑:我刚刚意识到上面的示例代码是错误的! overall_average_revenuerevenue_per_unit列中所有整数的平均值...但这与每单位的实际平均收入不同,因为不同的行具有不同的单位数。我需要一个加权平均值。回到绘图板......

1 个答案:

答案 0 :(得分:2)

虽然它有点原始SQL,但仍然有效。

TableName.pluck('sum(units) * avg(revenue_per_unit)').first