Както е документирано под SELECT
Синтаксис:
С други думи, прилага се след операцията по групиране е извършена (за разлика от WHERE
, което се изпълнява преди всяка операция по групиране). Вижте WHERE срещу HAVING
.
Следователно, текущата ви заявка първо формира набора от резултати от следното:
SELECT COUNT(domain) AS `sum domains`, file
FROM `table`
GROUP BY Number
Вижте го на sqlfiddle :
<пред>| СУМ ДОМЕЙНИ | ФАЙЛ |-------------------------| 2 | aaa.com_1 || 2 | bbb.com_1 || 1 | eee.com_1 |
Както можете да видите, избраните стойности за file
колоната са само една от стойностите от всяка група - както е документирано в MySQL Разширения за GROUP BY
:
След това текущата ви заявка продължава да филтрира тези резултати според вашия HAVING
клауза:
HAVING COUNT(Number) > 1 AND file LIKE '%\_1'
Със стойностите на file
избрани по-горе, всяка отделна група отговаря на втория критерий; и първите две групи съвпадат по първия критерий. Следователно резултатите от пълната заявка
са:
Следвайки коментарите си по-горе , искате да филтрирате записите в file
преди групиране и след това филтрирайте получените групи за тези, които съдържат повече от едно съвпадение. Затова използвайте WHERE
и HAVING
съответно (и изберете Number
вместо file
за идентифициране на всяка група):
SELECT Number, COUNT(*) AS `sum domains`
FROM `table`
WHERE file LIKE '%\_1'
GROUP BY Number
HAVING `sum domains` > 1
Вижте го на sqlfiddle :
<пред>| НОМЕР | СУМА ДОМЕЙНИ |-----------------------| 222 | 2 |