使用表达式rails汇总活动记录

时间:2017-09-16 22:34:51

标签: ruby-on-rails rails-activerecord

我的sql视图中有这个代码:

SELECT
    reports.`date`
    reports.book_title
    SUM( reports.net_sold_count * reports.avg_list_price / 10 ) AS revenue
FROM
    reports
GROUP BY
    reports.date,
    reports.book_title

我需要将其翻译为ruby代码

我有活跃的记录模型

class Report  < ActiveRecord::Base

现在我有了这段代码:

Report.group(:date, :book_title)

但我不知道接下来要去哪里,因为所有示例中的.sum只接受一个参数。(http://api.rubyonrails.org/classes/ActiveRecord/Calculations.html#method-i-sum

UPD: 现在,我正在考虑尝试像

这样的东西
Report.select('date, book_title, SUM( reports.net_sold_count * reports.avg_list_price / 10 ) AS revenue').group(:date, :book_title)

1 个答案:

答案 0 :(得分:1)

#sum文档具有误导性。是的,#sum只接受一个参数,但该参数不必是与列名对应的符号,该参数也可以是使用可用列的SQL表达式。特别是,#sum的参数可以是Ruby字符串:

'reports.net_sold_count * reports.avg_list_price / 10'

所以你可以说:

Report.group(:date, :book_title).sum('reports.net_sold_count * reports.avg_list_price / 10')

这会给你一个看起来像的哈希:

{
  [some_date, some_title] => some_sum,
  ...
}

你可以根据需要拆回Ruby领域。