Je veux faire quelque chose comme ça :
SELECT *
FROM db.table
WHERE COUNT(someField) > 1
Comment puis-je réaliser cela dans MySql ?
Je veux faire quelque chose comme ça :
SELECT *
FROM db.table
WHERE COUNT(someField) > 1
Comment puis-je réaliser cela dans MySql ?
Utiliser le HAVING
, pas WHERE
pour la comparaison des résultats agrégés.
En prenant la requête au pied de la lettre :
SELECT *
FROM db.table
HAVING COUNT(someField) > 1
Idéalement, il devrait y avoir un GROUP BY
définis en vue d'une évaluation correcte dans le cadre de la HAVING
mais MySQL autorise les colonnes cachées dans le GROUP BY ...
S'agit-il d'une préparation à une contrainte unique sur les someField
? Il semblerait que ce soit le cas...
Besoin d'un GROUP BY
(à moins qu'il ne s'agisse de quelque chose de non standard dans MySQL) ?
@Martin Smith : A pris la requête au pied de la lettre ; a abordé le problème du GROUP BY (y compris la fonction des colonnes cachées).
La seule mise en garde ici (au moins dans la version 5.1.46-community MySQL Community Server (GPL)) est que "Chaque table dérivée doit avoir son propre alias", ce qui fera ressembler votre sql à : SELECT nom_utilisateur, numb from( Select nom_utilisateur, count(nom_utilisateur) as numb from clients GROUP BY nom_utilisateur ) as my_table WHERE numb > 3
Comme OMG Ponies l'a indiqué, c'est la clause de possession qui est recherchée. Toutefois, si vous espériez obtenir des lignes distinctes au lieu d'un résumé (la clause "having" crée un résumé), vous ne pouvez pas le faire en une seule déclaration. Dans ce cas, vous devez utiliser deux instructions.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.