Wie unter SELECT
dokumentiert Syntax:
Mit anderen Worten, es wird nach angewendet die Gruppierungsoperation durchgeführt wurde (im Gegensatz zu WHERE
, die vorher ausgeführt wird jeder Gruppierungsvorgang). Siehe WHERE vs HAVING
.
Daher bildet Ihre aktuelle Abfrage zunächst die Ergebnismenge aus:
SELECT COUNT(domain) AS `sum domains`, file
FROM `table`
GROUP BY Number
Sehen Sie es auf sqlfiddle :
| SUM DOMAINS | FILE | --------------------------- | 2 | aaa.com_1 | | 2 | bbb.com_1 | | 1 | eee.com_1 |
Wie Sie sehen können, sind die für die file
ausgewählten Werte Spalte sind lediglich einer der Werte aus jeder Gruppe – wie unter MySQL dokumentiert Erweiterungen zu GROUP BY
:
Ihre aktuelle Abfrage fährt dann fort, diese Ergebnisse nach Ihrem HAVING
zu filtern Klausel:
HAVING COUNT(Number) > 1 AND file LIKE '%\_1'
Mit den Werten von file
oben ausgewählt, stimmt jede einzelne Gruppe mit dem zweiten Kriterium überein; und die ersten beiden Gruppen stimmen beim ersten Kriterium überein. Daher die Ergebnisse von der vollständigen Abfrage
sind:
| SUM DOMAINS | FILE | --------------------------- | 2 | aaa.com_1 | | 2 | bbb.com_1 |
Folgen Sie Ihren obigen Kommentaren , möchten Sie die Datensätze nach file
filtern vorher gruppieren und dann die resultierenden Gruppen nach denen filtern, die mehr als eine Übereinstimmung enthalten. Verwenden Sie daher WHERE
und HAVING
(und wählen Sie Number
statt file
um jede Gruppe zu identifizieren):
SELECT Number, COUNT(*) AS `sum domains`
FROM `table`
WHERE file LIKE '%\_1'
GROUP BY Number
HAVING `sum domains` > 1
Sehen Sie es auf sqlfiddle :
| NUMBER | SUM DOMAINS | ------------------------ | 222 | 2 |