我有一個記錄集,其中包含一個日期字段,並且想要確定記錄集中有多少個唯一日期。如何計算ROR中特定字段中具有唯一值的記錄數?
喜歡的東西:
Record.find(:all).date.unique.count
當然的,但是,這似乎並沒有工作。
我有一個記錄集,其中包含一個日期字段,並且想要確定記錄集中有多少個唯一日期。如何計算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