从数据库中选择,分组和求和结果

时间:2009-10-12 18:56:29

标签: ruby-on-rails activerecord group-by

我有一个数据库,其中包含一些我要总结的字段。但这不是大问题,我想按照它们创建的月份对这些字段进行分组。 ActiveRecord自动创建了一个名为“created_at”的字段。所以我的问题;如何按月对结果进行分组,然后对每个月的字段求和?

已更新为代码

@hours = Hour.all(:conditions => "user_id = "+ @user.id.to_s, 
                  :group => "strftime('%m', created_at)",
                  :order => 'created_at DESC')

这是我现在的代码。管理按月分组,但无法总结我的两个字段,“分钟”和“薪水”,我需要总结

3 个答案:

答案 0 :(得分:2)

您可以使用active record calculations执行此操作。一些示例代码可能是

Model.sum(:column_name, :group => 'MONTH("created_at")')

显然,有一点需要注意,MONTH是特定于mysql的,所以如果你在SQLite数据库上进行开发,这将不起作用。

答案 1 :(得分:1)

我不知道您是否使用SQL查询来执行此操作(不更改当前的表结构)。但是,您可以使用一些代码行。

records = Tasks.find(:conditions => {..})
month_groups = records.group_by{|r| r.created_at.month}
month_groups.each do |month, records|
  sum stuff.. blah blah blah..
end

我在这个问题的右侧看到了这个链接。我假设除了MySQL之外的其他数据库也有类似的功能。

mysql select sum group by date

答案 2 :(得分:1)

通过使用以下方法修复:获取查询时选择,输入手动选择

@hours = Hour.all(:conditions => "user_id = "+ @user.id.to_s,
                  :select => "created_at, SUM(time) time",
                  :group => "strftime('%m', created_at)",
                  :order => 'created_at DESC')