После добавления GROUP BY вы больше не можете ссылаться ни на один элемент из исходного набора, кроме выражений, которые появляются в предложении GROUP BY, или агрегатной функции в любом другом.
Причина в том, что после GROUP BY набор будет состоять из одной строки на группу, и единственное значение, которое гарантированно будет одинаковым, - это выражение GROUP BY. Для всех остальных столбцов вы должны гарантировать одно значение, и единственный способ сделать это - использовать агрегатную функцию - по определению она принимает набор значений и возвращает одно.
Вот почему, если вы используете идентификатор категории GROUP BY, вы не можете ссылаться на название категории.
так как в вашем случае они предполагаются функционально зависимыми, вы можете добавить оба к предложению GROUP BY или добавить фиктивный агрегат к имени категории.
SELECT Categories.CategoryName, Categories.CategoryID, COUNT(*) AS CountProducts
FROM Categories
LEFT JOIN
Products
ON Products.CategoryID=Categories.CategoryID
GROUP BY Categories.CategoryName, Categories.CategoryID
OR
SELECT MAX(Categories.CategoryName) AS CategoryName, Categories.CategoryID, COUNT(*) AS CountProducts
FROM Categories
LEFT JOIN
Products
ON Products.CategoryID=Categories.CategoryID
GROUP BY Categories.CategoryID