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

我找到了这个解决方案 here :
User.find(:all, :group => [:first, :email], :having => "count(*) > 1" )
但它似乎不适用于 postgres。我收到此错误:

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

最佳答案

测试和工作版本

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

此外,这有点无关但很方便。如果您想查看每个组合被找到的次数,请将 .size 放在最后:
User.select(:first,:email).group(:first,:email).having("count(*) > 1").size

你会得到一个看起来像这样的结果集:
{[nil, nil]=>512,
 ["Joe", "[email protected]"]=>23,
 ["Jim", "[email protected]"]=>36,
 ["John", "[email protected]"]=>21}

觉得这很酷,以前没见过。

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

关于ruby-on-rails - 使用 Active Record、Rails 和 Postgres 查找具有多个重复字段的行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21669202/

10-16 00:49