sql >> Base de Datos >  >> RDS >> Mysql

¿Cómo puedo hacer dos condiciones para tener una cláusula?

Como se documenta en SELECT Sintaxis:

En otras palabras, se aplica después la operación de agrupación se ha realizado (en contraste con WHERE , que se realiza antes cualquier operación de agrupación). Ver DÓNDE vs TENER .

Por lo tanto, su consulta actual primero forma el conjunto de resultados a partir de lo siguiente:

SELECT   COUNT(domain) AS `sum domains`, file
FROM     `table`
GROUP BY Number

Véalo en sqlfiddle :

| SUM DOMAINS |      FILE |
---------------------------
|           2 | aaa.com_1 |
|           2 | bbb.com_1 |
|           1 | eee.com_1 |

Como puede ver, los valores seleccionados para el file columna son simplemente uno de los valores de cada grupo, como se documenta en MySQL Extensiones a GROUP BY :

Su consulta actual luego procede a filtrar estos resultados de acuerdo con su HAVING cláusula:

HAVING   COUNT(Number) > 1 AND file LIKE '%\_1'

Con los valores de file seleccionado arriba, cada grupo individual coincide con el segundo criterio; y los dos primeros grupos coinciden en el primer criterio. Por lo tanto, los resultados de la consulta completa son:

| SUM DOMAINS |      FILE |
---------------------------
|           2 | aaa.com_1 |
|           2 | bbb.com_1 |

Siguiendo sus comentarios anteriores , desea filtrar los registros en file antes agrupar y luego filtrar los grupos resultantes para aquellos que contienen más de una coincidencia. Por lo tanto, use WHERE y HAVING respectivamente (y seleccione Number en lugar de file para identificar cada grupo):

SELECT   Number, COUNT(*) AS `sum domains`
FROM     `table`
WHERE    file LIKE '%\_1'
GROUP BY Number
HAVING   `sum domains` > 1

Véalo en sqlfiddle :

| NUMBER | SUM DOMAINS |
------------------------
|    222 |           2 |