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 |