Conforme documentado em
SELECT
Sintaxe:Em outras palavras, é aplicado depois a operação de agrupamento foi realizada (em contraste com
WHERE
, que é executado antes qualquer operação de agrupamento). Consulte ONDE vs TER
. Portanto, sua consulta atual primeiro forma o conjunto de resultados a partir do seguinte:
SELECT COUNT(domain) AS `sum domains`, file
FROM `table`
GROUP BY Number
Veja em sqlfiddle :
| SUM DOMAINS | FILE | --------------------------- | 2 | aaa.com_1 | | 2 | bbb.com_1 | | 1 | eee.com_1 |
Como você pode ver, os valores selecionados para o
file
column são apenas um dos valores de cada grupo - conforme documentado em MySQL Extensões para GROUP BY
:Sua consulta atual passa a filtrar esses resultados de acordo com seu
HAVING
cláusula:HAVING COUNT(Number) > 1 AND file LIKE '%\_1'
Com os valores de
file
selecionado acima, cada grupo corresponde ao segundo critério; e os dois primeiros grupos coincidem no primeiro critério. Portanto, os resultados da da consulta completa
estão:| SUM DOMAINS | FILE | --------------------------- | 2 | aaa.com_1 | | 2 | bbb.com_1 |
Seguindo seus comentários acima , você deseja filtrar os registros em
file
antes agrupamento e, em seguida, filtre os grupos resultantes para aqueles que contêm mais de uma correspondência. Portanto, use WHERE
e HAVING
respectivamente (e selecione Number
em vez 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
Veja em sqlfiddle :
| NUMBER | SUM DOMAINS | ------------------------ | 222 | 2 |