Как найти записи с дублирующимися данными с помощью Active Record

Каков наилучший способ поиска записей с повторяющимися значениями в столбце с использованием ruby ​​и нового Activerecord?

+26
24 февр. '11 в 14:42
источник поделиться
5 ответов

Перевод @TuteC в ActiveRecord:

sql = 'SELECT id, 
         COUNT(id) as quantity 
         FROM types 
         GROUP BY name 
       HAVING quantity > 1'
#=>
Type.select("id, count(id) as quantity")
  .group(:name)
  .having("quantity > 1")
+49
24 февр. '11 в 18:10
источник

Вот как я решил это с помощью AREL-помощников и без специального SQL:

Person.select("COUNT(last_name) as total, last_name").
  group(:last_name).
  having("COUNT(last_name) > 1").
  order(:last_name).
  map{|p| {p.last_name => p.total} }

Действительно, это всего лишь лучший способ написать SQL. Это находит все записи, которые имеют повторяющиеся значения last_name, и сообщает вам, сколько и какие последние имена находятся в хорошем хеше.

+23
12 июл. '12 в 5:20
источник

Я бил головой об этой проблеме со стеком 2016 (Rails 4.2, Ruby 2.2) и получил то, что хотел:

> Model.select([:thing]).group(:thing).having("count(thing) > 1").all.size
 => {"name1"=>5, "name2"=>4, "name3"=>3, "name4"=>2, "name5"=>2}
+13
11 авг. '16 в 8:36
источник

С помощью специального SQL это находит types с одинаковыми значениями для name:

sql = 'SELECT id, COUNT(id) as quantity FROM types
         GROUP BY name HAVING quantity > 1'
repeated = ActiveRecord::Base.connection.execute(sql)
+11
24 февр. '11 в 14:58
источник

В Rails 2.x выберите private метод класса AR. Просто используйте find():

klass.find(:all, 
  :select => "id, count(the_col) as num", 
  :conditions => ["extra conditions here"], 
  :group => 'the_col', 
  :having => "num > 1")
+5
04 апр. '11 в 17:48
источник

Посмотрите другие вопросы по меткам или Задайте вопрос