Объединить 2 счета с различными, где на одном столе - PullRequest
3 голосов
/ 06 января 2009

Есть ли лучший способ сделать это?

SELECT
  (SELECT count(*) FROM `tbl` WHERE `status` = 0) as 'text1',
  (SELECT count(*) FROM `tbl` WHERE `status` > 0) as 'text2'

text1 и text2 являются заголовками.

Ответы [ 4 ]

4 голосов
/ 06 января 2009

Как насчет

select sum(if(status=0,1,0)) as zeros, 
       sum(if(status>0,1,0)) as greater 
from tbl;

Не обязательно быть лучше, но это полезная идиома, чтобы иметь в своем умственном арсенале!

1 голос
/ 06 января 2009

Вот еще один способ:

SELECT
  COUNT(NULLIF(`status` = 0, 0)),
  COUNT(NULLIF(`status` > 0, 0))
FROM `tbl`
1 голос
/ 06 января 2009

Я голосую за использование двух разных запросов для простоты и улучшения читаемости кода. Нет смысла использовать умный хак для объединения запросов, когда вы можете получить тот же результат и более читаемый код, имея два запроса

0 голосов
/ 06 января 2009

Это дает вам другой вывод, но сортировка работает:

SELECT `status` > 0 AS 'stat', COUNT( * )
FROM `tbl`
GROUP BY stat

Выход:

stat | COUNT(*)
-------------------------------
 0   | (count where status = 0)
 1   | (count where status > 0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...