Ruby on rails 如何在ActiveRecord中为每个唯一列值获取2条或更多记录?
如何在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
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仍然适用,但输出保持不变。为了更清楚,我还添加了另一个结果集。