假设我有一个包含整数列no_of_units
和average_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_revenue
是revenue_per_unit
列中所有整数的平均值...但这与每单位的实际平均收入不同,因为不同的行具有不同的单位数。我需要一个加权平均值。回到绘图板......
答案 0 :(得分:2)
虽然它有点原始SQL,但仍然有效。
TableName.pluck('sum(units) * avg(revenue_per_unit)').first