Jak je zdokumentováno v části SELECT
Syntaxe:
Jinými slovy, použije se po operace seskupení byla provedena (na rozdíl od WHERE
, která se provádí před jakákoli operace seskupování). Viz KDE vs HAVING
.
Proto váš aktuální dotaz nejprve vytvoří sadu výsledků z následujícího:
SELECT COUNT(domain) AS `sum domains`, file
FROM `table`
GROUP BY Number
Podívejte se na to na sqlfiddle :
| SUM DOMAINS | FILE | --------------------------- | 2 | aaa.com_1 | | 2 | bbb.com_1 | | 1 | eee.com_1 |
Jak můžete vidět, hodnoty vybrané pro file
jsou pouze jednou z hodnot z každé skupiny – jak je zdokumentováno v MySQL Rozšíření do GROUP BY
:
Váš aktuální dotaz pak pokračuje ve filtrování těchto výsledků podle vašeho HAVING
klauzule:
HAVING COUNT(Number) > 1 AND file LIKE '%\_1'
S hodnotami file
výše vybraná, každá jednotlivá skupina odpovídá druhému kritériu; a první dvě skupiny se shodují podle prvního kritéria. Proto výsledky úplného dotazu
jsou:
| SUM DOMAINS | FILE | --------------------------- | 2 | aaa.com_1 | | 2 | bbb.com_1 |
Sledujete vaše komentáře výše , chcete filtrovat záznamy podle file
před seskupení a poté filtrovat výsledné skupiny pro ty, které obsahují více než jednu shodu. Použijte proto WHERE
a HAVING
(a vyberte Number
místo file
k identifikaci každé skupiny):
SELECT Number, COUNT(*) AS `sum domains`
FROM `table`
WHERE file LIKE '%\_1'
GROUP BY Number
HAVING `sum domains` > 1
Podívejte se na sqlfiddle :
| NUMBER | SUM DOMAINS | ------------------------ | 222 | 2 |