Rails使用SQL的group_by功能

3
我收到了一个名为Answer的模型调用,并且以下是它的表格。
id      group_id    qset_id 
1       123            1
2       123            2
3       123            1
4       456            1
5       456            1
6       456            3

我需要返回一个包含每个group_id和它们不同的qset_id的数组或json格式。
可能是这样的:
class: [
    {
        "group_id": 123
        "qset_id": [1,2]
    },
    {
        "group_id": 456
        "qset_id": [1,3]
    }
]

我考虑使用group_by,但是我卡在这里了。而且表格非常大,有没有一种高效的Rails方式来处理它?

1个回答

2
你试过这个吗?
@answer = Answer.all.group_by(&:group_id) 

@answer.each_with_index do |answer, index|
  {
   'group_id': index,
   'qset_id: answer.flatten.map{|x| x_id}
  }    
end

I have to tell that I had to study more query sql to find this solution

ActiveRecord::Base.connection.exec_query('SELECT group_id, GROUP_CONCAT(qset_id) FROM answers GROUP BY group_id').rows.to_h

我在这里创建了一个测试,结果我收到了正确的答案。
4.1.15@2.2.0 (main)> ActiveRecord::Base.connection.exec_query('SELECT proposal_id, GROUP_CONCAT(DISTINCT unit_id) FROM bookings GROUP BY proposal_id').rows.to_h
  SQL (0.2ms)  SELECT proposal_id, GROUP_CONCAT(DISTINCT unit_id) FROM bookings GROUP BY proposal_id
=> {1=>"2,3", 3=>"4", 4=>"5", 5=>"6"}

我不确定,因为它花费了太长时间而且结果没有显示。这个“Answer”非常庞大(超过1000万条记录)。 - rj487
所以你需要直接在SQL中执行此操作。 - Breno Perucchi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接