URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 4762
[ Назад ]

Исходное сообщение
"Подсчет числа строк"

Отправлено Дима , 25-Окт-05 10:37 
Всем привет.

Вопрос такой. Есть поле типа boolean.
Нужно одним запросом подсчитать число строк, значение которых 'true' и значение которых 'false';

В MySQL проходит так
select sum(b),sum(!b) from tbl;

Как тоже самое сделать в postgresql.

Заранее благодарен, Дима.


Содержание

Сообщения в этом обсуждении
"Подсчет числа строк"
Отправлено allez , 25-Окт-05 11:21 
>Всем привет.
>
>Вопрос такой. Есть поле типа boolean.
>Нужно одним запросом подсчитать число строк, значение которых 'true' и значение которых
>'false';
>
>В MySQL проходит так
>select sum(b),sum(!b) from tbl;
>
>Как тоже самое сделать в postgresql.
>
>Заранее благодарен, Дима.


Э-э, вы серьезно спрашиваете или тонко издеваетесь? Делайте
"select * from tbl" и получите ответ на ваш вопрос.
Или у вас поле типа boolean умеет принимать какое-то иное значение кроме
'true' и 'false'? Или вы допускаете значение 'null' в этом поле? А зачем?

P.S. Почитайте про ключевое слово WHERE в операторе SELECT.


"Подсчет числа строк"
Отправлено Дима , 25-Окт-05 11:54 
>>Всем привет.
>>
>>Вопрос такой. Есть поле типа boolean.
>>Нужно одним запросом подсчитать число строк, значение которых 'true' и значение которых
>>'false';
>>
>>В MySQL проходит так
>>select sum(b),sum(!b) from tbl;
>>
>>Как тоже самое сделать в postgresql.
>>
>>Заранее благодарен, Дима.
>
>
>Э-э, вы серьезно спрашиваете или тонко издеваетесь? Делайте
>"select * from tbl" и получите ответ на ваш вопрос.
>Или у вас поле типа boolean умеет принимать какое-то иное значение кроме
>
>'true' и 'false'? Или вы допускаете значение 'null' в этом поле? А
>зачем?
>
>P.S. Почитайте про ключевое слово WHERE в операторе SELECT.


Нет, я не издеваюсь, я серьезно. Мне нужно, чтобы запрос выдал сразу число true и число false.

У меня, кстати вышло так
select SUM(cast(case WHEN b then 1 else 0 end as int)), SUM(cast(case WHEN b then 0 else 1 end as int))from tbl;


"Подсчет числа строк"
Отправлено allez , 25-Окт-05 12:02 
А-а, только теперь до меня дошло, что вам нужна не общая сумма, а отдельно
количество истинных и отдельно - ложных значений поля. Прошу прощения,
тормознул :-).

"Подсчет числа строк"
Отправлено GD , 25-Окт-05 12:20 
>Всем привет.
>
>Вопрос такой. Есть поле типа boolean.
>Нужно одним запросом подсчитать число строк, значение которых 'true' и значение которых
>'false';
>
>В MySQL проходит так
>select sum(b),sum(!b) from tbl;
>
>Как тоже самое сделать в postgresql.
>
>Заранее благодарен, Дима.

странные ответы

select b, sum(*) from tbl group by b;


"Подсчет числа строк"
Отправлено Дима , 25-Окт-05 13:02 
>>Всем привет.
>>
>>Вопрос такой. Есть поле типа boolean.
>>Нужно одним запросом подсчитать число строк, значение которых 'true' и значение которых
>>'false';
>>
>>В MySQL проходит так
>>select sum(b),sum(!b) from tbl;
>>
>>Как тоже самое сделать в postgresql.
>>
>>Заранее благодарен, Дима.
>
>странные ответы
>
>select b, sum(*) from tbl group by b;


В таком случае мне выдастся результат в двух строках. А на самом деле мне нужен результат в одной строке, так как у меня там еще полно на самом деле условий grop by и where. (Запрос гораздо более сложный, это просто я в вопросе для выделения сути дела свел его к такому простому случаю).

P.S. А так вроде бы вопрос отпал. Работает то что я написал.
select SUM(cast(case WHEN b then 1 else 0 end as int)), SUM(cast(case WHEN b then 0 else 1 end as int))from tbl;



"Подсчет числа строк"
Отправлено GD , 25-Окт-05 14:06 
>>>Всем привет.
>>>
>>>Вопрос такой. Есть поле типа boolean.
>>>Нужно одним запросом подсчитать число строк, значение которых 'true' и значение которых
>>>'false';
>>>
>>>В MySQL проходит так
>>>select sum(b),sum(!b) from tbl;
>>>
>>>Как тоже самое сделать в postgresql.
>>>
>>>Заранее благодарен, Дима.
>>
>>странные ответы
>>
>>select b, sum(*) from tbl group by b;
>
>
>В таком случае мне выдастся результат в двух строках. А на самом
>деле мне нужен результат в одной строке, так как у меня
>там еще полно на самом деле условий grop by и where.
>(Запрос гораздо более сложный, это просто я в вопросе для выделения
>сути дела свел его к такому простому случаю).
>
>P.S. А так вроде бы вопрос отпал. Работает то что я написал.
>
>select SUM(cast(case WHEN b then 1 else 0 end as int)), SUM(cast(case
>WHEN b then 0 else 1 end as int))from tbl;

тады ой


"Подсчет числа строк"
Отправлено Divan , 27-Окт-05 13:53 
>Всем привет.
>
>Вопрос такой. Есть поле типа boolean.
>Нужно одним запросом подсчитать число строк, значение которых 'true' и значение которых
>'false';
>
>В MySQL проходит так
>select sum(b),sum(!b) from tbl;
>
>Как тоже самое сделать в postgresql.
>
>Заранее благодарен, Дима.

чуть чуть упростить можно -
select count(*),(select count(*) from tbl where not b) from tbl where b;

looks bit nicely ;-)


"Подсчет числа строк"
Отправлено Дима , 27-Окт-05 13:59 
>>Всем привет.
>>
>>Вопрос такой. Есть поле типа boolean.
>>Нужно одним запросом подсчитать число строк, значение которых 'true' и значение которых
>>'false';
>>
>>В MySQL проходит так
>>select sum(b),sum(!b) from tbl;
>>
>>Как тоже самое сделать в postgresql.
>>
>>Заранее благодарен, Дима.
>
>чуть чуть упростить можно -
>select count(*),(select count(*) from tbl where not b) from tbl where b;
>
>
>looks bit nicely ;-)


Спасибо, тоже идея. А то к MySQL 3.23 привык, вложенных запросов не делаю :-)