列出has_many中具有X个关联数的记录数

时间:2017-01-04 19:42:37

标签: sql ruby-on-rails ruby rails-activerecord

我的Person类有0个或更多个小部件关联

class Person < ActiveRecord::Base
  has_many :widgets
end

我想列出有X小部件的人数,即:

Num of widgets | Num of people
0              | 10
1              | 34
2              | 0
...
100            | 20

(即34个人有1个小部件等)。

到目前为止,我付出了最大的努力:

Person.joins(:widgets).group('people.id').select('people.id, count(widget_id) as widget_count').group('widget_count')

但我收到了

 Mysql2::Error: Can't group on 'widget_count'

2 个答案:

答案 0 :(得分:1)

原始SQL查询应如下所示(在PostgreSQL中测试):

SELECT a.widget_count, COUNT(a.widget_count) FROM 
(SELECT p.id, COUNT(w.id) AS widget_count FROM Person p JOIN Widget w ON w.person_id = p.id GROUP BY p.id) 
AS a 
GROUP BY a.widget_count

答案 1 :(得分:0)

我对语法无法帮助你,因为这不是我强大的套件。但是知道SQL你可能想要交换计数。 你在想什么实际上是人民。都是。

希望这有助于您的思路。