65

日付フィールドを含むレコード セットがあり、そのレコード セットに含まれる一意の日付の数を確認したいと考えています。

何かのようなもの:

Record.find(:all).date.unique.count 

もちろん、それはうまくいかないようです。

4

7 に答える 7

84

あなたがしようとしているのは、次のSQLです。

SELECT COUNT(DISTINCT date) FROM records

ActiveRecordにはこれが組み込まれています:

Record.count('date', :distinct => true)
于 2008-08-31T03:52:26.200 に答える
16

SQL以外:

Record.find(:all).group_by(&:date).count

ActiveSupportのEnumerable#group_byは不可欠です。

于 2008-09-02T18:52:17.063 に答える
10

答えの詳細:

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}
于 2014-07-23T14:59:37.093 に答える
2

また、データベースのフィールドにインデックスがあることを確認してください。そうしないと、クエリがすぐに遅くなります。

(SQL でこれを行う方がはるかに優れています。そうしないと、カウントに答えるためだけに db テーブル全体をメモリにプルします。)

于 2008-09-16T12:14:02.520 に答える