当前位置:  开发笔记 > 后端 > 正文

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

如何解决《如何计算ROR中特定字段中具有唯一值的记录数?》经验,为你挑选了6个好方法。

我有一个包含日期字段的记录集,并希望确定记录集中表示的唯一日期数.

就像是:

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

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



1> Yule..:

在rails 4及以上版本中略有改变:distinct => true现已弃用.使用:

Record.distinct.count('date')

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

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


它对我不起作用.使用`.count('DISTINCT date')`
我最终使用`Record.group(:date).count.count`.

2> Natalie Weiz..:

您要的是以下SQL:

SELECT COUNT(DISTINCT date) FROM records

ActiveRecord内置了这个:

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


现在不推荐使用(rails 4),请参阅下面的答案.

3> m104..:

在SQL之外:

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

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



4> Yi Feng Xie..:

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

所以我达到了要求

Record.count('DISTINCT date')



5> leompeters..:

详细说明答案:

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}



6> JacobEvelyn..:

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

推荐阅读
落单鸟人
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有