我可以将记录与分组记录的数量分组,如下所示:
@cars = Car.group(:manufacturer).select("id, manufacturer, COUNT(id) AS total_count)
输出将是这样的;
Porsche - 5
Renault - 3
Mercedes - 1
Audi - 2
我现在想弄清楚如何获得分组记录列表(他们的ID) - 就像保时捷一样,我想知道5个分组的汽车(他们的ID)。有没有办法做到这一点 - 理想情况下使用MySQL(在select
段落中)?
答案 0 :(得分:4)
一种方法是使用GROUP_CONCAT
来引用文档,“返回一个包含来自组的连接非NULL
值的字符串结果。”它会是这样的:
@cars = Car.group(:manufacturer)
.select("id, manufacturer, COUNT(id) AS total_count, GROUP_CONCAT(id) AS car_ids")
@cars.first.car_ids # => "1,2,5,9"
@cars.first.car_ids.split(',') # => [ "1", "2", "5", "9" ]
但是,我应该提醒一下,将manufacturer
作为汽车的文本属性会很快变得头疼。使用has_many :cars
的制造商型号会更好。这样您就可以进行更智能的查询,例如: Manufacturer.includes(:cars).all
。这就是我们首先使用关系数据库的原因。