Jak udokumentowano w SELECT
Składnia:
Innymi słowy, jest stosowany po operacja grupowania została wykonana (w przeciwieństwie do WHERE
, który jest wykonywany przed dowolna operacja grupowania). Zobacz GDZIE vs MIEĆ
.
Dlatego Twoje bieżące zapytanie najpierw tworzy zestaw wyników z następującego:
SELECT COUNT(domain) AS `sum domains`, file
FROM `table`
GROUP BY Number
Zobacz na sqlfiddle :
| SUM DOMAINS | FILE | --------------------------- | 2 | aaa.com_1 | | 2 | bbb.com_1 | | 1 | eee.com_1 |
Jak widać, wartości wybrane dla file
kolumny są tylko jedną z wartości z każdej grupy — jak udokumentowano w MySQL Rozszerzenia do GROUP BY
:
Twoje bieżące zapytanie przechodzi następnie do filtrowania tych wyników zgodnie z Twoim HAVING
klauzula:
HAVING COUNT(Number) > 1 AND file LIKE '%\_1'
Z wartościami file
wybrane powyżej, każda grupa spełnia drugie kryterium; a pierwsze dwie grupy pasują do pierwszego kryterium. Dlatego wyniki pełnego zapytania
są:
| SUM DOMAINS | FILE | --------------------------- | 2 | aaa.com_1 | | 2 | bbb.com_1 |
Obserwujesz Twoje komentarze powyżej , chcesz filtrować rekordy w file
przed grupowanie, a następnie filtruj otrzymane grupy pod kątem tych, które zawierają więcej niż jedno dopasowanie. Dlatego użyj WHERE
i HAVING
odpowiednio (i wybierz Number
zamiast file
aby zidentyfikować każdą grupę):
SELECT Number, COUNT(*) AS `sum domains`
FROM `table`
WHERE file LIKE '%\_1'
GROUP BY Number
HAVING `sum domains` > 1
Zobacz na sqlfiddle :
| NUMBER | SUM DOMAINS | ------------------------ | 222 | 2 |