Come documentato in SELECT Sintassi:
In altre parole, viene applicato dopo l'operazione di raggruppamento è stata eseguita (in contrasto con WHERE , che viene eseguito prima qualsiasi operazione di raggruppamento). Vedi WHERE vs HAVING
.
Pertanto, la tua query corrente forma prima il set di risultati da quanto segue:
SELECT COUNT(domain) AS `sum domains`, file
FROM `table`
GROUP BY Number
Guardalo su sqlfiddle :
| SUM DOMAINS | FILE | --------------------------- | 2 | aaa.com_1 | | 2 | bbb.com_1 | | 1 | eee.com_1 |
Come puoi vedere, i valori selezionati per il file sono semplicemente uno dei valori di ciascun gruppo, come documentato in MySQL Estensioni a GROUP BY
:
La tua query attuale procede quindi a filtrare questi risultati in base al tuo HAVING clausola:
HAVING COUNT(Number) > 1 AND file LIKE '%\_1'
Con i valori di file selezionato sopra, ogni singolo girone corrisponde al secondo criterio; e i primi due gironi corrispondono al primo criterio. Pertanto i risultati della la query completa
sono:
| SUM DOMAINS | FILE | --------------------------- | 2 | aaa.com_1 | | 2 | bbb.com_1 |
Dopo i tuoi commenti sopra , vuoi filtrare i record su file prima raggruppamento e quindi filtrare i gruppi risultanti per quelli contenenti più di una corrispondenza. Quindi usa WHERE e HAVING rispettivamente (e seleziona Number invece di file per identificare ogni gruppo):
SELECT Number, COUNT(*) AS `sum domains`
FROM `table`
WHERE file LIKE '%\_1'
GROUP BY Number
HAVING `sum domains` > 1
Guardalo su sqlfiddle :
| NUMBER | SUM DOMAINS | ------------------------ | 222 | 2 |