在Rails 3 ActiveRecord中按日期汇总记录

时间:2012-08-23 15:49:36

标签: ruby-on-rails-3 activerecord

我有一个包含许多共享时间戳的记录的大表。我想得到一个结果集,其中包含一个由时间戳汇总的列。我看到你怎么可以简单地使用'sum'方法来获得一个列总数。但是,我需要按日期列分组。这远不那么明显。我知道我可以使用'find_by_sql',但它对代码来说是可怕的,因为我必须为超过20列做这个。我认为AR必须有一些魔力来做到这一点让我逃避?

日期设置示例:

table / model:games / Game

player_name, points_scored, game_date
john, 20, 08-20-2012
sue, 30, 08-20-2012
john, 12, 08-21-2012
sue, 10, 08-21-2012

我想在结果中看到的是:

game_date, total_points
08-20-2012, 50
08-21-2012, 22

以下是SQL查询的粗略示例:

SELECT game_date, SUM(points_scored)
FROM games
GROUP BY game_date

请注意,我实际上按时间戳排列了20个“得分”列。

我怎样才能简单地使用AR来做到这一点?提前谢谢。

1 个答案:

答案 0 :(得分:0)

确定。它需要一些挖掘和玩耍,但我想通了。我希望找到比'find_by_sql'更好的东西而且我做了,但它并没有好多了。再次,知道我需要按时间戳排列SUM 20+列,这里是上述示例上下文中的解决方案。

results = Game.select( 'game_date, SUM(points_scored) as "points_scored"').group( 'game_date' )

现在,这看起来并不那么糟糕,但我必须在'select'方法中键入20+ SUM()。不会从'find_by_sql'中保存大量工作,但它可以正常工作。