Postgres と Activerecord を使用して、複数の列にわたって重複した値を持つレコードを見つける最適な方法は何ですか?
この解決策を見つけましたここ:
User.find(:all, :group => [:first, :email], :having => "count(*) > 1" )
しかし、postgres では動作しないようです。次のエラーが発生します:
PG::GroupingError: エラー: 列 "parts.id" は GROUP BY 句に出現するか、集計関数で使用される必要があります
ベストアンサー1
テスト済みおよび動作バージョン
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}
かなりクールだと思ったけど、今まで見たことがなかった。
タリンに感謝します。これは彼女の答えを少し調整したバージョンです。