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 |