После выполнения группировки можно исключать строки из результата выполнения запроса. Для этого в SQL есть предложение HAVING, предназначение которого аналогично предложению WHERE, только работает с группами строк.

Так как HAVING работает с группами строк, то в условиях отсечения используют агрегатные функции вместо значений столбцов (можно использовать выражения из GROUP BY, но проще и эффективней это сделать в WHERE).

Например найдем категории товаров, в которых только один товар. Все товары:

SELECT category_id, product_id, name
  FROM product
 ORDER BY category_id
category_id product_id name
3 1 Пылесос S6
3 2 Холодильник A2
5 12 Nikon D750
5 11 Lord Nikon 95
6 5 Xbox
6 3 Nintendo
6 4 PlayStation
7 6 Наушники S3

Посчитаем количество товаров в каждой категории:

SELECT category_id,
       count(*)
  FROM product
 GROUP BY category_id
 ORDER BY category_id
category_id count
3 2
5 2
6 3
7 1

Оставим категории, в которых только один продукт:

SELECT category_id,
       count(*)
  FROM product
 GROUP BY category_id
HAVING count(*) = 1
 ORDER BY category_id
category_id count
7 1

Стоит отметить, что использованные в HAVING агрегатные функции нет необходимости использовать в списке выборки. Например, выведем только идентификатор категории товаров:

SELECT category_id
  FROM product
 GROUP BY category_id
HAVING count(*) = 1
 ORDER BY category_id
category_id
7

4.9 NULL значения в GROUP BY

4.11 ROLLUP