同じユーザー名を持つすべてのユーザーを 3M テーブルで検索しようとしました。このようなものがうまくいくかもしれません。
User.find(:all, :group => [:username], :having => "count(*) > 1" )
ただし、Postgres を使用しているため、これは me を返しますActiveRecord::StatementInvalid: PG::Error: ERROR: column "users.id" must appear in the GROUP BY clause or be used in an aggregate function
。
私はこのようなことを試みています
User.select('users.id, users.username').having("count(*) > 1").group('users.username')
しかし、それでも同じエラーが発生します。私が間違っていることは何か分かりますか?
更新:を使用して何とか動作させましたUser.select('users.*').group('users.id').having('count(users.username) > 1')
が、このクエリは、5 つのレコードを作成している場合でも、空の配列のように見える this を返します。
GroupAggregate (cost=9781143.40..9843673.60 rows=3126510 width=1365)
Filter: (count(username) > 1)
-> Sort (cost=9781143.40..9788959.68 rows=3126510 width=1365)
Sort Key: id
-> Seq Scan on users (cost=0.00..146751.10 rows=3126510 width=1365)
(5 rows)
=> []
なぜこれが起こっているのか、これらの5行を取得する方法はありますか?