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 |