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 |