Страница 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
:D

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
: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 то же самое можно сделать.

Добавлено: 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 фулл сканов, когда можно обойтись одним? :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:

Добавлено: 27 ноя 2005, 19:34
Zy
Бесплатная версия Oracle:

http://www.oracle.com/technology/produc ... index.html

Добавлено: 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 :lol:
таких может и нет, а "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 - большое к тому же :!: