Rails - 使用Group By获取列值

时间:2014-07-11 19:22:05

标签: ruby-on-rails join group-by

我有以下表格,其中的条目可能如下所示:

 Table: sessions

 ID | CREATED_AT              | UPDATED_AT              | USER_ID | GROUP_ID 
 ---|-------------------------|-------------------------|---------|----------  
 27 | 2014-07-01 23:02:16     | 2014-07-01 23:03:18     | 1       | 1     
 28 | 2014-07-02 16:55:25     | 2014-07-02 17:31:40     | 1       | 2       
 29 | 2014-07-07 20:31:13     | 2014-07-07 20:34:17     | 1       | 3        

 Table: groups

 ID | NAME              | CREATED_AT              | UPDATED_AT             
 ---|-------------------|-------------------------|------------------------
 1  | Marching          | 2013-12-17 19:45:28     | 2013-12-17 19:45:28    
 2  | Reaching          | 2014-02-07 17:29:59     | 2014-02-07 17:29:59    
 3  | Picking           | 2014-03-11 21:38:56     | 2014-03-11 21:38:56 

我在Rails中有以下查询:

 Session.joins(:group).select('groups.name').where(:user_id => 1).group('sessions.group_id').count

返回以下键和值:

  => {2=>7, 1=>3, 3=>1}  (The "key" is the group_id and the "value"
                          is the # of times it occurs).

我的问题是:而不是返回" id"作为关键,我可以返回groups.name吗?看起来像这样:

  => {"Reaching"=>7, "Marching"=>3, "Picking"=>1}    

如果没有,我是否需要根据每个group_id进行循环并重新查询?

非常感谢。

1 个答案:

答案 0 :(得分:2)

如果您在模型中设置了所有内容,这应该可以使用。

data = Group.joins(:sessions).select('name, count(*) as occurrence_count').where('sessions.user_id = ?', 1).group('groups.name')

然后您可以像这样访问它

data.first.occurrence_count