Страница 1 из 1
Подсчитать строки
Добавлено: 27 ноя 2005, 16:55
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
Спасибо. И сорри за тупой простой вопрос.
Re: Подсчитать строки
Добавлено: 27 ноя 2005, 17:09
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

Re: Подсчитать строки
Добавлено: 27 ноя 2005, 18:09
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

А зачем нам n фулл сканов, когда можно обойтись одним?
В случае если 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 то же самое можно сделать.
Добавлено: 27 ноя 2005, 18:12
Zy
Ребяты, надо быть проще
select count(*), p1
from a
where p1 in (1, 2, ..., n)
group by p1
Добавлено: 27 ноя 2005, 19:00
vg
Zy писал(а):Ребяты, надо быть проще
select count(*), p1
from a
where p1 in (1, 2, ..., n)
group by p1
Точно, спасибо

Re: Подсчитать строки
Добавлено: 27 ноя 2005, 19:05
vg
Malysh'OK писал(а):
А зачем нам n фулл сканов, когда можно обойтись одним?
В случае если 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 
Добавлено: 27 ноя 2005, 19:34
Zy
Добавлено: 27 ноя 2005, 21:12
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
Re: Подсчитать строки
Добавлено: 27 ноя 2005, 23:02
hawk
vg писал(а):
Нет таких славов у MSsql,
decode 
таких может и нет, а "case when field1=1 then 1 else 0 end" почти наверняка есть, равно как есть он и в Oracle, DB2 и ANSI стандарте.
но, решение с group by самое правильное,
Добавлено: 30 ноя 2005, 08:28
Димас
select count(*), p1
from a
where p1 BETWEEN 1 AND 100
group by p1
Добавлено: 30 ноя 2005, 16:09
vg
Спасибо, парни, а Zy - большое к тому же
