使用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