ruby-on-rails - query - where rails




Trouver des lignes avec plusieurs champs en double avec Active Record, Rails & Postgres (3)

Quel est le meilleur moyen de rechercher des enregistrements avec des valeurs dupliquées sur plusieurs colonnes à l'aide de Postgres et d'Activerecord?

J'ai trouvé cette solution here :

User.find(:all, :group => [:first, :email], :having => "count(*) > 1" )

Mais cela ne semble pas fonctionner avec postgres. Je reçois cette erreur:

PG :: GroupingError: ERREUR: la colonne "parts.id" doit apparaître dans la clause GROUP BY ou être utilisée dans une fonction d'agrégat


Basé sur la réponse ci-dessus par @NewUserNameHere je crois que la bonne façon de montrer le compte pour chacun est

res = User.select('first, email, count(1)').group(:first,:email).having('count(1) > 1')

res.each {|r| puts r.attributes } ; nil

Cette erreur se produit car POSTGRES vous oblige à placer des colonnes de regroupement dans la clause SELECT.

essayer:

User.select(:first,:email).group(:first,:email).having("count(*) > 1").all

(note: non testé, vous devrez peut-être le modifier)

EDITED pour supprimer la colonne d'identifiant


Testé et version de travail

User.select(:first,:email).group(:first,:email).having("count(*) > 1")

Aussi, c'est un peu sans rapport mais pratique. Si vous voulez voir comment chaque combinaison a été trouvée, mettez .count à la fin:

User.select(:first,:email).group(:first,:email).having("count(*) > 1").size

et vous obtiendrez un résultat qui ressemble à ceci:

{[nil, nil]=>512,
 ["Joe", "[email protected]"]=>23,
 ["Jim", "[email protected]"]=>36,
 ["John", "[email protected]"]=>21}

Pensé que c'était plutôt cool et ne l'avait pas vu auparavant.

Merci à Taryn, c'est juste une version modifiée de sa réponse.





activerecord