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

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

How can I count the number of records that have a unique value in a particular field in ROR?

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

类似的东西:

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

但是,那似乎不起作用。


在滑轨4中的更改略有变化,现在已弃用:distinct => true。用途:

1
Record.distinct.count('date')

或者如果您想要日期和数字:

1
Record.group(:date).distinct.count(:date)

您要使用的是以下SQL:

1
SELECT COUNT(DISTINCT date) FROM records

ActiveRecord具有以下内置功能:

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

SQL之外:

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

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


最新的#count rails源代码仅接受1个参数。
请参阅:http://api.rubyonrails.org/classes/ActiveRecord/Calculations.html#method-i-count

所以我达到了

的要求

1
Record.count('DISTINCT date')

详细说明答案:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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}

正如我在此处提到的,在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 ...


此外,请确保您在数据库中的字段上有一个索引,否则该查询将很快变得毫无用处。

(最好在SQL中执行此操作,否则您将整个db表拉入内存只是为了回答计数。)


推荐阅读

    计算机主板BIOS设置详细-BIOS知识

    计算机主板BIOS设置详细-BIOS知识,,什么是电脑BIOS,一般电脑主板已经设置完毕后,电脑就开始按del键进入BIOS。系统启动BIOS,即微机的基本输入

    计算机蓝屏故障的计算机蓝屏解决方案

    计算机蓝屏故障的计算机蓝屏解决方案,,电脑蓝屏电脑故障经常使用电脑的朋友经常遇到,因为电脑蓝屏是一个非常普遍的现象,所以很难预测,什么时

    计算机自动关机的原因是什么

    计算机自动关机的原因是什么,,计算机(计算机),通常称为计算机,是一种用于高速计算的电子计算机。它可以进行数值计算和逻辑计算,还具有存储记忆

    电脑功率计算|电脑功率计算公式

    电脑功率计算|电脑功率计算公式,,电脑功率计算公式  从设计角度出发一般取300w/台基本都可以满足要求,可以从以下几个方面分析一下电脑功

    4超值串行端口记录器的首选

    4超值串行端口记录器的首选,,今天,市场在两种内置录音机接口:一个是卖老式的并行端口,另一个是串口,符合未来发展趋势。老机升级用户端口可以

    如何设置计算机视图视图的统一视图

    如何设置计算机视图视图的统一视图,,不知道你是否有这样的使用电脑经验,电脑在不同的文件夹打开,有时这个文件夹是用来查看列表的方式,但是当

    的故障_计算机解决无法打印文档

    的故障_计算机解决无法打印文档,,核心提示:最近,打印机出现了一个奇怪的现象,在打印正常之前,打印机不能打印最近的突然,提示发送打印作业,计算

    PC计算机:AMDCPU核心细节

    PC计算机:AMDCPU核心细节,,核心提示:AthlonXP的核心型athlonxp有4种不同的核心类型,但都有个共同点:他们都使用socketa接口,他们都使用PR标称值

    分析计算机减速的原因

    分析计算机减速的原因,,核心提示:做以上九点,我相信你的爱是快的。当然,如果速度很慢,你应该考虑硬件升级。学习电脑组装,就来吧… 有很多人说