Запрос Rails GROUP BY с использованием Active Record

Я хочу написать этот запрос, используя классическую Active Record, а не необработанный sql.

SELECT

   user_id,
   term, 
   SUM(views) AS Views,
   SUM(clicks) AS Clicks

FROM reports
GROUP BY user_id, term

Пробовал это, но не работает.

Report.group([:user_id, :term]).sum([:views, :clicks])

Я знаю, что можно использовать .group_by{}, но это не очень эффективно, потому что оно агрегируется Ruby и не выполняет запрос.

БД: PostgreSQL




Ответы (1)


Я думаю, вы можете использовать это

@reports = Report.select("reports.user_id, reports.term,
  sum(reports.views) as total_views
  sum(reports.clicks) as total_clicks").
  group("reports.user_id, reports.term")

обратите внимание на все в сумме (как результат суммы), хотя они не отображаются, но они существуют, если вы называете имя

@report.first # total_views and total_clicks not show up in rails console but
@report.first.total_views # you will see total calculation
person widjajayd    schedule 15.07.2019