29

ruby と新しい Activerecord を使用して、列の値が重複しているレコードを見つける最良の方法は何ですか?

4

6 に答える 6

51

@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")
于 2011-02-24T18:10:14.317 に答える
27

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 の値が重複しているすべてのレコードが検索され、nice ハッシュに含まれる姓の数と名前がわかります。

于 2012-07-12T05:20:15.140 に答える
11

カスタム SQL を使用すると、次typesの値が同じであることがわかりnameます。

sql = 'SELECT id, COUNT(id) as quantity FROM types
         GROUP BY name HAVING quantity > 1'
repeated = ActiveRecord::Base.connection.execute(sql)
于 2011-02-24T14:58:51.407 に答える
5

Rails 2.x では、select は AR クラスのプライベート メソッドです。find() を使用するだけです。

klass.find(:all, 
  :select => "id, count(the_col) as num", 
  :conditions => ["extra conditions here"], 
  :group => 'the_col', 
  :having => "num > 1")
于 2011-04-04T17:48:23.570 に答える