如何构建唯一值列表并显示其ID数组?

时间:2016-11-18 19:17:00

标签: sql ruby-on-rails postgresql ruby-on-rails-4

此代码是我试图实现的概念的简化版本。实际上,我正在使用一个有点复杂的查询结果 - 但我认为这个简单的例子就足够了。

我试图用他们的id数组输出一个有序的唯一值列表。我不确定是否需要使用一个或两个select语句,或者我是否应该使用一个select语句和一些ruby代码。

数据(人物)

id: first: last:
1   Julie  Brown
2   Julie  Brown
3   Mike   Smith
4   Julie  Brown
5   Andrea Smith
6   Mike   Smith
7   Jim    Brown

所需的输出

Jim Brown (7)
Julie Brown (1, 2, 4)
Andrea Smith (5)
Mike Smith (3, 6)

1 个答案:

答案 0 :(得分:5)

@people = Person
  .select(:first, :last, "array_agg(id) AS ids")
  .group(:first, :last)

您可以使用array_agg函数在单个查询中获取所有ID。

@people.each do |person|
  full_name = [person.first, person.last].join(" ")
  puts "#{ full_name } (#{ person.ids.join(", ") })"
end