如何计算在ROR的特定字段中具有唯一值的记录数?

时间:2020-03-05 18:45:36  来源:igfitidea点击:

我有一个包含日期字段的记录集,并想确定记录集中代表了多少个唯一的日期。

就像是:

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

但当然,这似乎不起作用。

解决方案

回答

我们要使用的是以下SQL:

SELECT COUNT(DISTINCT date) FROM records

ActiveRecord具有以下内置功能:

Record.count('date', :distinct => true)

回答

在SQL之外:

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

ActiveSupport的Enumerable#group_by是必不可少的。

回答

另外,请确保我们在数据库中的字段上有一个索引,否则该查询将很快失效。

(在SQL中执行此操作要好得多,否则将整个数据库表拉入内存只是为了回答计数。)