Bre*_*nt 64 ruby activerecord ruby-on-rails
我有一个包含日期字段的记录集,并希望确定记录集中表示的唯一日期数.
就像是:
Record.find(:all).date.unique.count
Run Code Online (Sandbox Code Playgroud)
但当然,这似乎不起作用.
Yul*_*ule 107
在rails 4及以上版本中略有改变:distinct => true现已弃用.使用:
Record.distinct.count('date')
Run Code Online (Sandbox Code Playgroud)
或者如果你想要日期和数字:
Record.group(:date).distinct.count(:date)
Run Code Online (Sandbox Code Playgroud)
Nat*_*aum 83
您要的是以下SQL:
SELECT COUNT(DISTINCT date) FROM records
Run Code Online (Sandbox Code Playgroud)
ActiveRecord内置了这个:
Record.count('date', :distinct => true)
Run Code Online (Sandbox Code Playgroud)
m10*_*104 16
在SQL之外:
Record.find(:all).group_by(&:date).count
Run Code Online (Sandbox Code Playgroud)
ActiveSupport的Enumerable#group_by是必不可少的.
Yi *_*Xie 13
最新#count的rails源代码只接受1个参数.请参阅:http://api.rubyonrails.org/classes/ActiveRecord/Calculations.html#method-i-count
所以我达到了要求
Record.count('DISTINCT date')
Run Code Online (Sandbox Code Playgroud)
leo*_*ers 11
详细说明答案:
Post.create(:user_id => 1, :created_on => '2010-09-29')
Post.create(:user_id => 1, :created_on => '2010-09-29')
Post.create(:user_id => 2, :created_on => '2010-09-29')
Post.create(:user_id => null, :created_on => '2010-09-29')
Post.group(:created_on).count
# => {'2010-09-29' => 4}
Post.group(:created_on).count(:user_id)
# => {'2010-09-29' => 3}
Post.group(:created_on).count(:user_id, :distinct => true) # Rails <= 3
Post.group(:created_on).distinct.count(:user_id) # Rails = 4
# => {'2010-09-29' => 2}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
77425 次 |
| 最近记录: |