Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment puis-je faire deux conditions pour avoir une clause

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 |