【问题标题】:Get the sum of one column multiplied by the total of another, using ActiveRecord queries使用 ActiveRecord 查询获取一列的总和乘以另一列的总和
【发布时间】:2014-05-11 15:51:47
【问题描述】:

假设我有一个包含整数列 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 列中所有整数的平均值...但这与每单位的实际平均收入不同,因为不同的行有不同的单位数。我需要一个加权平均值。回到绘图板...

【问题讨论】:

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


    【解决方案1】:

    这会起作用,尽管它有点原始 SQL。

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

    【讨论】:

    • 这是我原来问题的正确答案......但我刚刚意识到我的问题有缺陷,这并没有给出实际的平均收入! (请参阅我对问题的编辑)。无论如何都要投赞成票...
    猜你喜欢
    • 1970-01-01
    • 2017-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-26
    • 1970-01-01
    相关资源
    最近更新 更多