Ruby on rails 如何在ActiveRecord中为每个唯一列值获取2条或更多记录?

Ruby on rails 如何在ActiveRecord中为每个唯一列值获取2条或更多记录?,ruby-on-rails,ruby,postgresql,activerecord,Ruby On Rails,Ruby,Postgresql,Activerecord,如何在ActiveRecord中为每个唯一列值获取2条或更多记录 鉴于: Name | School Jonathan | Sunshine College
 Dylan | Sunshine College Matt | Sunshine College Joseph | Sunshine College Stephen | Greenville School Phil | Greenville School Warren | Greenville Sc

如何在ActiveRecord中为每个唯一列值获取2条或更多记录

鉴于:

Name     | School
Jonathan | Sunshine College

Dylan    | Sunshine College
Matt     | Sunshine College
Joseph   | Sunshine College
Stephen  | Greenville School
Phil     | Greenville School
Warren   | Greenville School


JohnPaul | Greenville School
然后,如果我想为每所学校输出2条记录,它将如下所示:

Name     | School
Jonathan | Sunshine College

Dylan    | Sunshine College
Stephen  | Greenville School
Phil     | Greenville School
Name     | School
Jonathan | Sunshine College

Dylan    | Sunshine College
Matt     | Sunshine College
Stephen  | Greenville School
Phil     | Greenville School
Warren   | Greenville School


如果我希望每所学校有3张记录,那么它将如下所示:

Name     | School
Jonathan | Sunshine College

Dylan    | Sunshine College
Stephen  | Greenville School
Phil     | Greenville School
Name     | School
Jonathan | Sunshine College

Dylan    | Sunshine College
Matt     | Sunshine College
Stephen  | Greenville School
Phil     | Greenville School
Warren   | Greenville School



当您将中的模型集合转换为可进行相等性比较的属性列表时,您可以
uniq

MyModel.all.pluck(:first_name, :last_name).uniq

可以按所需的列值对表的数据进行分区。之后,您可以使用一个条件来告诉每个分区需要多少条记录:

Student
  .from(
    Student.select('*, row_number() OVER (PARTITION BY school) AS rownum')
  )
  .select('*')
  .where('rownum < 2')
学生
.来自(
学生。选择(按学校划分)上方的('*,row_number())作为rownum')
)
。选择(“*”)
.where('rownum<2')

这里有一种不用sql的方法

Student.group(:school)
   .each{|student| Student.where(school: student.school)
   .first(2)
   .each{|result| puts "#{result.name.ljust(20, ' ')}| #{result.school}"}}

# Phil                | Greenville School
# Warren              | Greenville School
# Jonathan            | Sunshine College
# Dylan               | Sunshine College

您使用的是什么DBMS(“数据库”)?是否希望“Matt”和“Warren”出现在输出表中?如果你只是想消除重复的名字/学校对,那么马特和沃伦应该在那里。或者你想做些别的事情?你想要任何两条记录还是需要进行排序?@SebastianPalma我正在使用Postgres@LesNightingill可能是,这真的取决于输入,如果我每个学校输入1,那么它应该只显示jonathan和stephen。如果是每所学校3个,那么让jonathan、dylan和matt为sunshine拍摄,然后让stephen、phil和warren为greenvilleI拍摄,但我在哪里可以设置一个“N”变量来获得每所学校N个独特的记录。因此,如果N输入为2,那么我应该得到每个学校的2个记录,如上面的示例。自从我回答后,您已经更改了问题。是的,我更改了,uniq仍然适用,但输出保持不变。为了更清楚,我还添加了另一个结果集。