Как получить 2 или более записей на уникальное значение столбца в ActiveRecord? - PullRequest
2 голосов
/ 24 сентября 2019

Как получить 2 или более записей на уникальное значение столбца в ActiveRecord?

Учитывая:

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

Если бы я хотел 3 записи на школу, то это будет выглядеть так:

Name     | School
Jonathan | Sunshine College

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



Ответы [ 3 ]

4 голосов
/ 25 сентября 2019

Вы можете разделить данные таблицы по нужному значению столбца.После этого вы можете использовать условие, чтобы указать, сколько записей на раздел вы хотите:

Student
  .from(
    Student.select('*, row_number() OVER (PARTITION BY school) AS rownum')
  )
  .select('*')
  .where('rownum < 2')
1 голос
/ 26 сентября 2019

Вот способ без использования 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
0 голосов
/ 25 сентября 2019

Вы можете uniq, если вы преобразовали коллекции моделей в список атрибутов, которые можно сравнить на равенство:

MyModel.all.pluck(:first_name, :last_name).uniq
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...