关于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表拉入内存只是为了回答计数。)


推荐阅读

    linux提取字段串命令?

    linux提取字段串命令?,数字,字符串,状态,工具,命令,文件,范本,样式,正则,字

    linux切换日期命令?

    linux切换日期命令?,时间,系统,信息,命令,城市,终端,时分,日期,窗口,操作系

    linux查看命令记录?

    linux查看命令记录?,信息,系统,时间,地址,名称,命令,数据,环境,服务,历史,lin

    linux命令输出计算?

    linux命令输出计算?,标准,地址,工作,信息,系统,命令,软件,数据,文件,控制台,l

    linux修改日期命令?

    linux修改日期命令?,时间,系统,命令,信息,工具,工作,服务,代码,日期,终端,lin

    linux计算总数命令?

    linux计算总数命令?,系统,第一,情况,数据,信息,电脑,命令,百分比,单位,工作,l

    linux中计算器命令?

    linux中计算器命令?,地址,数据,位置,网络,设备,时间,环境,平台,软件,命令,说

    linux记录终端命令?

    linux记录终端命令?,系统,信息,工作,地址,命令,名称,服务,首页,第一,管理,lin

    linux退出计算器命令?

    linux退出计算器命令?,工作,地址,系统,命令,通信,信息,电脑,目录,路径,操作,

    linux打印日期命令?

    linux打印日期命令?,时间,系统,工作,命令,标准,环境,档案,信息,设备,位置,Lin

    重启计算机linux命令?

    重启计算机linux命令?,系统,设备,工作,标准,名称,命令,状态,数据,服务,提示,L

    linux基本命令日期?

    linux基本命令日期?,时间,系统,命令,管理,工作,网络,工具,基础,标准,环境,详

    linux导出记录命令?

    linux导出记录命令?,系统,标准,数据,命令,地方,地址,位置,服务,下来,设计,在l

    linux计算器打开命令?

    linux计算器打开命令?,工作,地址,命令,标准,管理,系统,目录,路径,管道,控制

    linux命令记录导出?

    linux命令记录导出?,系统,标准,数据,命令,信息,文件,代码,图片,设计,工具,在l

    linux计算摘要的命令?

    linux计算摘要的命令?,数据,网络,数字,密码,工具,名称,正规,标准,代码,文件,l

    linux执行命令记录?

    linux执行命令记录?,系统,信息,时间,电脑,工作,命令,环境,管理,数据,官网,使

    linux运行特定命令?

    linux运行特定命令?,系统,网络,管理,地址,信息,工作,命令,时间,目录,任务,lin

    linux命令计算时间差?

    linux命令计算时间差?,时间,系统,标准,流程,状态,单位,名称,表达式,命令,时

    linux命令重启计算机?

    linux命令重启计算机?,服务,系统,工作,设备,标准,命令,名称,进程,级别,用户,l