Som dokumenterats under SELECT
Syntax:
Med andra ord, det tillämpas efter grupperingsoperationen har utförts (i motsats till WHERE
, som utförs före någon grupperingsoperation). Se WHERE vs HAVING
.
Därför bildar din aktuella fråga först resultatuppsättningen från följande:
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 är de valda värdena för file
kolumnen är bara ett av värdena från varje grupp – som dokumenterats under MySQL Tillägg till GROUP BY
:
Din nuvarande fråga fortsätter sedan med att filtrera dessa resultat enligt din HAVING
klausul:
HAVING COUNT(Number) > 1 AND file LIKE '%\_1'
Med värdena för file
vald ovan matchar varje enskild grupp på det andra kriteriet; och de två första grupperna matchar det första kriteriet. Därför resultaten av den fullständiga frågan
är:
| SUM DOMAINS | FILE | --------------------------- | 2 | aaa.com_1 | | 2 | bbb.com_1 |
Följer dina kommentarer ovan , vill du filtrera posterna på file
före gruppera och filtrera sedan de resulterande grupperna för de som innehåller mer än en matchning. Använd därför WHERE
och HAVING
(och välj Number
istället för file
för att identifiera varje grupp):
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 |