Есть ли лучший способ сделать это?
SELECT (SELECT count(*) FROM `tbl` WHERE `status` = 0) as 'text1', (SELECT count(*) FROM `tbl` WHERE `status` > 0) as 'text2'
text1 и text2 являются заголовками.
Как насчет
select sum(if(status=0,1,0)) as zeros, sum(if(status>0,1,0)) as greater from tbl;
Не обязательно быть лучше, но это полезная идиома, чтобы иметь в своем умственном арсенале!
Вот еще один способ:
SELECT COUNT(NULLIF(`status` = 0, 0)), COUNT(NULLIF(`status` > 0, 0)) FROM `tbl`
Я голосую за использование двух разных запросов для простоты и улучшения читаемости кода. Нет смысла использовать умный хак для объединения запросов, когда вы можете получить тот же результат и более читаемый код, имея два запроса
Это дает вам другой вывод, но сортировка работает:
SELECT `status` > 0 AS 'stat', COUNT( * ) FROM `tbl` GROUP BY stat
Выход:
stat | COUNT(*) ------------------------------- 0 | (count where status = 0) 1 | (count where status > 0)