【问题标题】:How to write a query for grouping records in Ruby on Rails?如何在 Ruby on Rails 中编写用于分组记录的查询?
【发布时间】:2011-09-16 12:32:10
【问题描述】:

我想根据创建时间获取所有用户数

   User.group("Date(created_at)").count

它会给我一个类似的输出

 {Wed, 03 Aug 2011=>25, Thu, 04 Aug 2011=>22, 06 Aug 2011=>4, Sun, 07 Aug 2011=>6, Mon, 08 Aug 2011=>5} 

我想要一个类似的数组:-

 [25,22,0,4,5]  // zero is for the dates when no record is there for that date.

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 activerecord


    【解决方案1】:

    @foo = User.group(:created_at).count 将为您提供按 created_at 日期分组的用户。

    正如你提到的,你会得到 {:date => count}'s 的哈希

    然后您可以查看@foo.values(获取您的计数数组)[25,22,0,4,5],或者像这样迭代它

    @foos.each_pair do |date, count|
      puts "#{date}: #{count}"
    end
    

    编辑我现在明白你想问什么了。

    你可以这样做

    start_date = Date.today - 7.days
    end_date = Date.today
    @foo = User.group("DATE(created_at)").where(:created_at => start_date..end_date).count
    counts = (start_date..end_date).map{ |d| @foo[d] || 0 }
    

    【讨论】:

    • 太棒了.. 但是几乎没有几个小的 tweeks 来获得确切的格式。改进了你的答案..检查这个。我的控制台输出cl.ly/1p1F0802393i1L363w23 赞成并接受。 :)
    猜你喜欢
    • 2013-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-08
    • 1970-01-01
    • 2012-12-18
    相关资源
    最近更新 更多