7

複数のユーザーを持つアカウントのコレクションを取得できます。

Account.group('accounts.id HAVING count(users.id) > 1').joins(:users)

しかし、そのオブジェクトで .count を呼び出すとすぐに、大爆発が起こります。

(0.3ms) SELECT COUNT(*) AS count_all, accounts.id HAVING count(users.id) > 1 AS accounts_id_having_count_users_id_1 FROM "accounts" INNER JOIN "users" ON "users"."account_id" = "accounts"."id " GROUP BY accounts.id HAVING count(users.id) > 1 ActiveRecord::StatementInvalid: PG::Error: エラー: "AS" またはその近くで構文エラーが発生 行 1: ...unt_all, accounts.id HAVING count(users .id) > 1 AS アカウント...

postgres では、私が望む実際のクエリは次のようです。

select count(*) from (SELECT accounts.id FROM "accounts" INNER JOIN "users" ON "users"."account_id" = "accounts"."id" GROUP BY accounts.id HAVING count(users.id) > 1) as a;

この(または同等の)クエリを生成するためにactiverecordを取得するにはどうすればよいですか?

4

2 に答える 2

0

ユーザーモデルからaccount_idでgroup_byするユーザーモデルからこれを試してみませんか

User.count(:group => :account_id) これにより、{:account_id => count_of_users } を示すハッシュが返される場合があります。たとえば、{1 => 3、2 => 5、3 => 2} です。

ここで、ユーザー数が 1 より大きい account_id を選択します。

于 2013-04-25T04:34:04.533 に答える