Som dokumenteret under SELECT Syntaks:
Med andre ord anvendes den efter grupperingsoperationen er blevet udført (i modsætning til WHERE , som udføres før enhver grupperingsoperation). Se WHERE vs HAVING
.
Derfor danner din aktuelle forespørgsel først resultatsættet fra følgende:
SELECT COUNT(domain) AS `sum domains`, file
FROM `table`
GROUP BY Number
Se den på sqlfiddle :
| SUM DOMAINS | FILE | --------------------------- | 2 | aaa.com_1 | | 2 | bbb.com_1 | | 1 | eee.com_1 |
Som du kan se, er de valgte værdier for file kolonne er blot én af værdierne fra hver gruppe – som dokumenteret under MySQL Udvidelser til GROUP BY
:
Din nuværende forespørgsel fortsætter derefter med at filtrere disse resultater i henhold til din HAVING klausul:
HAVING COUNT(Number) > 1 AND file LIKE '%\_1'
Med værdierne for file valgt ovenfor, hver enkelt gruppe matcher på det andet kriterium; og de to første grupper matcher det første kriterium. Derfor resultaterne af den komplette forespørgsel
er:
| SUM DOMAINS | FILE | --------------------------- | 2 | aaa.com_1 | | 2 | bbb.com_1 |
Følger dine kommentarer ovenfor , vil du filtrere posterne på file før gruppering og filtrer derefter de resulterende grupper for dem, der indeholder mere end ét match. Brug derfor WHERE og HAVING (og vælg Number i stedet for file for at identificere hver gruppe):
SELECT Number, COUNT(*) AS `sum domains`
FROM `table`
WHERE file LIKE '%\_1'
GROUP BY Number
HAVING `sum domains` > 1
Se den på sqlfiddle :
| NUMBER | SUM DOMAINS | ------------------------ | 222 | 2 |