HAVING - применяется для фильтрации функций и столбцов сгруппированных при помощи GROUP BY указанных в SELECT.
Другими словами применяется для агрегатных функций(COUNT(), MAX() ...) и столбцов указанных в выражении SELECT и обработанных GROUP BY. Если нужно использовать что-то, что не указанно в SELECT, то лучше использовать WHERE.
Порядок выполнения такой HAVING в MySQL
- 1. В SELECT указываем нужные столбцы или агрегатные функции(то с чем будем работать в GROUP BY и HAVING)
- 2. В GROUP BY пишем по какому столбцу или функции их группируем
- 3. В HAVING пишем условие фильтровки результата GROUP BY
Применяется последним и не оптимизируется. При использовании не по назначению на больших таблицах будут жуткие тормоза по этому нужно обязательно смотреть анализ EXPLAN
.
SELECT COUNT(*) AS `row`, `title` FROM `table` GROUP BY `sort` HAVING `row` > 2;
Здесь мы создаём псевдоним:
COUNT(*) AS `row`
Который в дальнейшем используем в выражении:
HAVING `row` > 2;
Или можно написать идентично:
HAVING COUNT(*) > 2;