Comme documenté sous SELECT Syntaxe :
En d'autres termes, il est appliqué après l'opération de regroupement a été effectuée (contrairement à WHERE , qui est effectuée avant toute opération de regroupement). Voir OÙ vs AVOIR
.
Par conséquent, votre requête actuelle forme d'abord le jeu de résultats à partir des éléments suivants :
SELECT COUNT(domain) AS `sum domains`, file
FROM `table`
GROUP BY Number
Voir sur sqlfiddle :
| SUM DOMAINS | FILE | --------------------------- | 2 | aaa.com_1 | | 2 | bbb.com_1 | | 1 | eee.com_1 |
Comme vous pouvez le voir, les valeurs sélectionnées pour le file colonne sont simplement l'une des valeurs de chaque groupe, comme documenté sous MySQL Extensions de GROUP BY
:
Votre requête actuelle procède ensuite au filtrage de ces résultats en fonction de votre HAVING clause :
HAVING COUNT(Number) > 1 AND file LIKE '%\_1'
Avec les valeurs de file sélectionné ci-dessus, chaque groupe correspond au deuxième critère ; et les deux premiers groupes correspondent sur le premier critère. Par conséquent, les résultats de la requête complète
sont :
| SUM DOMAINS | FILE | --------------------------- | 2 | aaa.com_1 | | 2 | bbb.com_1 |
Suite à vos commentaires ci-dessus , vous souhaitez filtrer les enregistrements sur file avant groupement, puis filtrez les groupes résultants pour ceux contenant plus d'une correspondance. Utilisez donc WHERE et HAVING respectivement (et sélectionnez Number au lieu de file pour identifier chaque groupe):
SELECT Number, COUNT(*) AS `sum domains`
FROM `table`
WHERE file LIKE '%\_1'
GROUP BY Number
HAVING `sum domains` > 1
Voir sur sqlfiddle :
| NUMBER | SUM DOMAINS | ------------------------ | 222 | 2 |