1. ホーム
  2. ruby-on-rails

[解決済み] Active Record、Rails、Postgresで重複するフィールドを持つ行を検索する

2022-09-03 06:11:58

質問

PostgresとActiverecordを使用して、複数の列で値が重複しているレコードを見つける最良の方法は何でしょうか?

私はこの解決策を見つけました ここで :

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}

今まで見たことがない、かなりクールなものだと思った。

これは彼女の答えに手を加えただけのものです。