Zoals gedocumenteerd onder SELECT
Syntaxis:
Met andere woorden, het wordt na . toegepast de groeperingsoperatie is uitgevoerd (in tegenstelling tot WHERE
, die vóór . wordt uitgevoerd elke groeperingshandeling). Zie WAAR vs. HAVING
.
Daarom vormt uw huidige zoekopdracht eerst de resultatenset van het volgende:
SELECT COUNT(domain) AS `sum domains`, file
FROM `table`
GROUP BY Number
Bekijk het op sqlfiddle :
| SUM DOMAINS | FILE | --------------------------- | 2 | aaa.com_1 | | 2 | bbb.com_1 | | 1 | eee.com_1 |
Zoals u kunt zien, zijn de geselecteerde waarden voor het file
kolom zijn slechts een van de waarden van elke groep, zoals gedocumenteerd onder MySQL Uitbreidingen op GROUP BY
:
Uw huidige zoekopdracht gaat vervolgens verder met het filteren van deze resultaten op basis van uw HAVING
clausule:
HAVING COUNT(Number) > 1 AND file LIKE '%\_1'
Met de waarden van file
hierboven geselecteerd, komt elke afzonderlijke groep overeen met het tweede criterium; en de eerste twee groepen komen overeen op het eerste criterium. Daarom de resultaten van de volledige zoekopdracht
zijn:
| SUM DOMAINS | FILE | --------------------------- | 2 | aaa.com_1 | | 2 | bbb.com_1 |
Naar aanleiding van je bovenstaande opmerkingen , u wilt de records filteren op file
voor groeperen en filter vervolgens de resulterende groepen op groepen die meer dan één overeenkomst bevatten. Gebruik daarom WHERE
en HAVING
respectievelijk (en selecteer Number
in plaats van file
om elke groep te identificeren):
SELECT Number, COUNT(*) AS `sum domains`
FROM `table`
WHERE file LIKE '%\_1'
GROUP BY Number
HAVING `sum domains` > 1
Bekijk het op sqlfiddle :
| NUMBER | SUM DOMAINS | ------------------------ | 222 | 2 |