我试图在一个超过3M的表格中查找所有用户名相同的用户。我读到了一些类似这样的东西,可能会起作用。
User.find(:all, :group => [:username], :having => "count(*) > 1" )
然而,由于我正在使用Postgres,这会返回错误信息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条记录。 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行的数据呢?
(5行)
并不意味着找到了5行 - 我使用explain时只找到了一行,但结果是相同的。 - Mike Szyndel