не может быть чтобы не было нормального решения...
Надо в одной и тойже таблице подсчитать кол-во строк по разным критериям.
Можно ли это сделать в одном запросе вместо (надеясь, что это будет быстрее)? :
select count(*) from table where field1 =1
select count(*) from table where field1 =2
select count(*) from table where field1 =3
...
select count(*) from table where field1 =@n
Спасибо. И сорри за тупой простой вопрос.
Подсчитать строки
Правила форума
Пожалуйста, ознакомьтесь с правилами данного форума
Пожалуйста, ознакомьтесь с правилами данного форума
-
- Маньяк
- Сообщения: 2803
- Зарегистрирован: 29 май 2003, 22:29
- Откуда: Магадан - Миссиссага
- Earl Grey
- Маньяк
- Сообщения: 2893
- Зарегистрирован: 22 фев 2005, 15:07
Re: Подсчитать строки
Я бы написалvg писал(а):не может быть чтобы не было нормального решения...
Надо в одной и тойже таблице подсчитать кол-во строк по разным критериям.
Можно ли это сделать в одном запросе вместо (надеясь, что это будет быстрее)? :
select count(*) from table where field1 =1
select count(*) from table where field1 =2
select count(*) from table where field1 =3
...
select count(*) from table where field1 =@n
Спасибо. И сорри за тупой простой вопрос.
Код: Выделить всё
select
(select count(*) from table where field1 =1) ,
(select count(*) from table where field1 =2),
(select count(*) from table where field1 =3),
...
(select count(*) from table where field1 =@n)
from table

- Malysh'OK
- Завсегдатай
- Сообщения: 305
- Зарегистрирован: 03 авг 2005, 18:41
- Откуда: Москва-Ванкувер
Re: Подсчитать строки
А зачем нам n фулл сканов, когда можно обойтись одним?Уникурсал Уникурсалыч писал(а):Я бы написалvg писал(а):не может быть чтобы не было нормального решения...
Надо в одной и тойже таблице подсчитать кол-во строк по разным критериям.
Можно ли это сделать в одном запросе вместо (надеясь, что это будет быстрее)? :
select count(*) from table where field1 =1
select count(*) from table where field1 =2
select count(*) from table where field1 =3
...
select count(*) from table where field1 =@n
Спасибо. И сорри за тупой простой вопрос.Код: Выделить всё
select (select count(*) from table where field1 =1) , (select count(*) from table where field1 =2), (select count(*) from table where field1 =3), ... (select count(*) from table where field1 =@n) from table

В случае если DB = Oracle :
Код: Выделить всё
select
count (decode (field1,1,0)) ,
count (decode (field1,2,0)) ,
count (decode (field1,3,0)) ,...
count (decode (field1,@n,0))
from table
-
- Маньяк
- Сообщения: 4706
- Зарегистрирован: 20 янв 2005, 19:11
-
- Маньяк
- Сообщения: 2803
- Зарегистрирован: 29 май 2003, 22:29
- Откуда: Магадан - Миссиссага
-
- Маньяк
- Сообщения: 2803
- Зарегистрирован: 29 май 2003, 22:29
- Откуда: Магадан - Миссиссага
Re: Подсчитать строки
Нет таких славов у MSsql, decodeMalysh'OK писал(а): А зачем нам n фулл сканов, когда можно обойтись одним?![]()
В случае если DB = Oracle :
Или с помощью Case то же самое можно сделать.Код: Выделить всё
select count (decode (field1,1,0)) , count (decode (field1,2,0)) , count (decode (field1,3,0)) ,... count (decode (field1,@n,0)) from table

-
- Маньяк
- Сообщения: 4706
- Зарегистрирован: 20 янв 2005, 19:11
-
- Пользователь
- Сообщения: 107
- Зарегистрирован: 02 авг 2004, 22:00
-
- Пользователь
- Сообщения: 141
- Зарегистрирован: 21 мар 2005, 20:08
- Откуда: St. Petersburg->Vancouver
Re: Подсчитать строки
таких может и нет, а "case when field1=1 then 1 else 0 end" почти наверняка есть, равно как есть он и в Oracle, DB2 и ANSI стандарте.vg писал(а): Нет таких славов у MSsql, decode
но, решение с group by самое правильное,
- Димас
- Житель
- Сообщения: 593
- Зарегистрирован: 22 июл 2005, 16:58
- Откуда: Север->Торонто
-
- Маньяк
- Сообщения: 2803
- Зарегистрирован: 29 май 2003, 22:29
- Откуда: Магадан - Миссиссага