Получение двух COUNT с использованием одного оператора SQL - PullRequest
2 голосов
/ 06 мая 2011

Предположим, что в Table1 есть столбец c1, для которого допустимые значения могут быть 1 или 0.

Как получить число 0, 1 с одним запросом? Возможно ли это?

извините, глупый способ допроса.

Я хотел получить ответ в одной строке, а не в одном столбце.

Ответы [ 6 ]

3 голосов
/ 06 мая 2011

Это чтение одной таблицы / индекса.У подзапросов, скорее всего, будет два таких чтения

SELECT
   COUNT(CASE status WHEN 1 THEN 1 ELSE NULL END) AS Ones,
   COUNT(CASE status WHEN 0 THEN 1 ELSE NULL END) AS Zeros
FROM
   MyTable

.. и он также переносим

2 голосов
/ 06 мая 2011

Альтернативный способ;

select
   sum(c1) as ones, 
   count(*) - sum(c1) as zeros
from
   Table1
2 голосов
/ 06 мая 2011

Если я правильно понимаю, просто GROUP BY этот столбец.

SELECT c1, count(*)
FROM Table1
GROUP BY c1;
1 голос
/ 06 мая 2011

Зависит от используемой вами СУБД. В оракуле возможно следующее:

select
 (select count(status) from table1 where status = 0) as status_0,
 (select count(status) from table1 where status = 1) as status_1
from dual
0 голосов
/ 09 мая 2011

выберите UID из emp

UID 0 0 0 1 1 1 1 0 0

select distinct

(select count(uid) from emp  where uid = 0) zeros_total,

(select count(uid) from emp where uid = 1) ones_total

from 
emp

O / P ** zeros_total5 one_total 4 **

0 голосов
/ 06 мая 2011

Уже ответили, но всегда есть (почти) несколько способов сделать это. Союз двух запросов?

select count(*) from t1 where value='0' 
union
select count(*) from t1 where value='1' 
...