Каков наилучший способ поиска записей с повторяющимися значениями в столбце с использованием ruby и нового Activerecord?
Как найти записи с дублирующимися данными с помощью Active Record
Ответ 1
Перевод @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")
Ответ 2
Вот как я решил это с помощью 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, и сообщает вам, сколько и какие последние имена находятся в хорошем хеше.
Ответ 3
Я бил головой об этой проблеме со стеком 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}
Ответ 4
С помощью специального SQL это находит types
с одинаковыми значениями для name
:
sql = 'SELECT id, COUNT(id) as quantity FROM types
GROUP BY name HAVING quantity > 1'
repeated = ActiveRecord::Base.connection.execute(sql)
Ответ 5
В 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")