Sélectionnez où le nombre d’un champ est supérieur à un

Je veux faire quelque chose comme ça:

SELECT * FROM db.table WHERE COUNT(someField) > 1 

Comment puis-je y parvenir avec MySQL?

Utilisez la clause HAVING , pas WHERE , pour la comparaison des résultats agrégés.

Prendre la requête à sa valeur nominale:

 SELECT * FROM db.table HAVING COUNT(someField) > 1 

Idéalement, il devrait y avoir un GROUP BY défini pour une évaluation correcte dans la clause HAVING , mais MySQL autorise les colonnes masquées de GROUP BY …

Est-ce en préparation d’une contrainte unique sur someField ? On dirait que ça devrait être …

 SELECT username, numb from( Select username, count(username) as numb from customers GROUP BY username ) as my_table WHERE numb > 3 

Vous pouvez aussi le faire avec une auto-jointure:

 SELECT t1.* FROM db.table t1 JOIN db.table t2 ON t1.someField = t2.someField AND t1.pk != t2.pk 

Une manière

 SELECT t1.* FROM db.table t1 WHERE exists (SELECT * FROM db.table t2 where t1.pk != t2.pk and t1.someField = t2.someField) 

Comme l’a déclaré OMG Ponies, la clause having est ce que vous recherchez. Cependant, si vous espériez que vous obtiendrez des lignes discrètes au lieu d’un résumé (le “avoir” crée un résumé), cela ne peut pas être fait dans une seule déclaration. Vous devez utiliser deux instructions dans ce cas.

Je donne un exemple sur Group By entre deux tables en SQL:

Select cn.name,ct.name,count(ct.id) totalcity from city ct left join country cn on ct.countryid = cn.id Group By cn.name,ct.name Having totalcity > 2


Pour moi, le fait de ne pas avoir un groupe par retourne un résultat vide. Donc, je suppose qu’avoir un groupe par pour avoir la déclaration est très important

Il convient également de mentionner que le “pk” devrait être un domaine clé. Le self-join

 SELECT t1.* FROM db.table t1 JOIN db.table t2 ON t1.someField = t2.someField AND t1.pk != t2.pk 

par Bill Karwin vous donne tous les enregistrements en double qui sont ce que je voulais. Parce que certains ont plus de deux, vous pouvez obtenir le même enregistrement plus d’une fois. J’ai tout écrit dans une autre table avec les mêmes champs pour éliminer les mêmes enregistrements en supprimant les champs clés. j’ai essayé

SELECT * FROM db.table HAVING COUNT(someField) > 1

ci-dessus en premier. Les données renvoyées ne donnent qu’un des doublons, moins de la moitié de ce que cela vous donne, mais le décompte est bon si c’est tout ce que vous voulez.