Подсчитать строки

Все, что вы хотели знать о программизме, но боялись спросить.
Ответить
vg
Маньяк
Сообщения: 2803
Зарегистрирован: 29 май 2003, 22:29
Откуда: Магадан - Миссиссага

Подсчитать строки

Сообщение 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

Спасибо. И сорри за тупой простой вопрос.
Аватара пользователя
Earl Grey
Маньяк
Сообщения: 2893
Зарегистрирован: 22 фев 2005, 15:07

Re: Подсчитать строки

Сообщение Earl Grey »

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
:D
Аватара пользователя
Malysh'OK
Завсегдатай
Сообщения: 305
Зарегистрирован: 03 авг 2005, 18:41
Откуда: Москва-Ванкувер

Re: Подсчитать строки

Сообщение Malysh'OK »

Уникурсал Уникурсалыч писал(а):
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
:D
А зачем нам n фулл сканов, когда можно обойтись одним? :lol:

В случае если 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
Или с помощью Case то же самое можно сделать.
Zy
Маньяк
Сообщения: 4706
Зарегистрирован: 20 янв 2005, 19:11

Сообщение Zy »

Ребяты, надо быть проще :-)

select count(*), p1
from a
where p1 in (1, 2, ..., n)
group by p1
vg
Маньяк
Сообщения: 2803
Зарегистрирован: 29 май 2003, 22:29
Откуда: Магадан - Миссиссага

Сообщение vg »

Zy писал(а):Ребяты, надо быть проще :-)

select count(*), p1
from a
where p1 in (1, 2, ..., n)
group by p1
Точно, спасибо :!:
vg
Маньяк
Сообщения: 2803
Зарегистрирован: 29 май 2003, 22:29
Откуда: Магадан - Миссиссага

Re: Подсчитать строки

Сообщение vg »

Malysh'OK писал(а): А зачем нам n фулл сканов, когда можно обойтись одним? :lol:

В случае если 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
Или с помощью Case то же самое можно сделать.
Нет таких славов у MSsql, decode :lol:
Zy
Маньяк
Сообщения: 4706
Зарегистрирован: 20 янв 2005, 19:11

Сообщение Zy »

Бесплатная версия Oracle:

http://www.oracle.com/technology/produc ... index.html
Yuri Dimant
Пользователь
Сообщения: 107
Зарегистрирован: 02 авг 2004, 22:00

Сообщение Yuri Dimant »

vg, в случае SELECT COUNT(*) SQL Server будет читать и NULL значение, зависит или тебе надо это


CREATE TABLE #Test
(
col INT
)
INSERT INTO #Test VALUES (NULL)
INSERT INTO #Test VALUES (1)

SELECT COUNT(*),COUNT(col) FROM #Test
hawk
Пользователь
Сообщения: 141
Зарегистрирован: 21 мар 2005, 20:08
Откуда: St. Petersburg->Vancouver

Re: Подсчитать строки

Сообщение hawk »

vg писал(а): Нет таких славов у MSsql, decode :lol:
таких может и нет, а "case when field1=1 then 1 else 0 end" почти наверняка есть, равно как есть он и в Oracle, DB2 и ANSI стандарте.
но, решение с group by самое правильное,
Аватара пользователя
Димас
Житель
Сообщения: 593
Зарегистрирован: 22 июл 2005, 16:58
Откуда: Север->Торонто

Сообщение Димас »

select count(*), p1
from a
where p1 BETWEEN 1 AND 100
group by p1
vg
Маньяк
Сообщения: 2803
Зарегистрирован: 29 май 2003, 22:29
Откуда: Магадан - Миссиссага

Сообщение vg »

Спасибо, парни, а Zy - большое к тому же :!:
Ответить