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 |