Това не е грешка в MySQL.
Заявка за агрегиране ще върне по един ред за срещана група. Без group by
, има една група -- цялата таблица. Признавам, че това е малко сложно, защото все още има една група, дори когато няма редове в таблицата.
С group by
, има по един ред на група. Ако в дадена група няма редове, групата не се появява. Във вашия случай, заявката:
SELECT `a`, `b`, COUNT(*) as `c`
FROM `mytable`
WHERE `status` = 1
Ще върне един ред с два NULL
s последвано от 0
.
Същата заявка с:
GROUP BY `a`,`b`
няма да върне редове, защото няма редове за формиране на групи.