如何计算ROR中特定字段中具有唯一值的记录数?
我有一个记录集,其中包含一个日期字段,并且想要确定记录集中有多少个唯一日期。如何计算ROR中特定字段中具有唯一值的记录数?
喜欢的东西:
Record.find(:all).date.unique.count
当然的,但是,这似乎并没有工作。
什么你要去的是下面的SQL:
SELECT COUNT(DISTINCT date) FROM records
的ActiveRecord有这个建于:SQL的
Record.count('date', :distinct => true)
此外,请确保您的数据库中的字段有一个索引,否则该查询将很快变得流畅。
(这是更好的做到这一点的SQL,否则你拉动整个数据库表到内存只是回答的数量。)
nex3的答案将正确地生成`COUNT` SQL语句。 http://guides.rubyonrails.org/active_record_querying.html#calculations – Kevin 2013-09-26 22:27:01
这在轨道4,5稍微改变及以上:distinct => true
现在已经过时。用途:
Record.distinct.count('date')
或者,如果你想要的日期和数量:
Record.group(:date).distinct.count(:date)
详图答案:
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}
正如我所提到here,Rails中4,使用(...).uniq.count(:user_id)
如前所述在其他答案中(针对此问题和SO中的其他答案)实际上会导致在查询中多出一个DISTINCT
:
SELECT DISTINCT COUNT(DISTINCT user_id) FROM ...
其实我们要做的是使用SQL字符串自己:
(...).count("DISTINCT user_id")
这给了我们:
SELECT COUNT(DISTINCT user_id) FROM ...
最新#count
在轨道上的源代码只接受1个参数。 看到:http://api.rubyonrails.org/classes/ActiveRecord/Calculations.html#method-i-count
所以我通过
Record.count('DISTINCT date')
达到的要求是有可能做到这一点使用多个列的范围是什么? – 2012-11-19 21:38:22
现在不推荐使用(导轨4),请参阅下面的答案。 – Yule 2013-10-14 14:14:37