使用Active Record,Rails&Postgres查找具有多个重复字段的行

使用Postgres和Activerecord在多个列中查找具有重复值的logging的最佳方法是什么?

我在这里find这个解决scheme

User.find(:all, :group => [:first, :email], :having => "count(*) > 1" )

但是它似乎不适用于postgres。 我得到这个错误:

PG :: GroupingError:错误:列“parts.id”必须出现在GROUP BY子句中或用于聚合函数

testing&工作版本

 User.select(:first,:email).group(:first,:email).having("count(*) > 1") 

此外,这是一个有点无关,但方便。 如果您想查看每个组合的发现次数,请在末尾加上.count:

 User.select(:first,:email).group(:first,:email).having("count(*) > 1").size 

你会得到一个结果集,看起来像这样:

 {[nil, nil]=>512, ["Joe", "test@test.com"]=>23, ["Jim", "email2@gmail.com"]=>36, ["John", "email3@gmail.com"]=>21} 

以为这很酷,以前没有见过。

感谢Taryn,这只是她答案的一个调整版本。

发生该错误是因为POSTGRES要求您将分组列放在SELECT子句中。

尝试:

 User.select(:first,:email).group(:first,:email).having("count(*) > 1").all 

(注意:未经testing,您可能需要调整它)

编辑删除ID列

根据上面的答案 @newUserNameHere我相信正确的方式来显示每个计数

 res = User.select('first, email, count(1)').group(:first,:email).having('count(1) > 1') res.each {|r| puts r.attributes } ; nil