Rails 使用 Active Record 的 GROUP BY 查询
Rails GROUP BY query using 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
我想你可以用这个
@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
我想使用经典的 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
我想你可以用这个
@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