I remember when I was using SQL server we did like like that:
SELECT count(CASE WHEN A THEN 1 END) AS cnt_a, count(CASE WHEN B
THEN 1 END) AS cnt_b FROM tab WHERE C;
I did a little test with pg_bench data, also works in PostgreSQL:
test=# select count(*) from history where tid = 1;
count
-------
574
(1 行)
时间: 9.553 ms
test=# select count(*) from history where tid = 2;
count
-------
1107
(1 行)
时间: 8.949 ms
test=# select count(CASE WHEN tid = 1 then 1 END) as t1_cont,
count(case when tid=2 then 1 end) as t2_cnt from history ;
t1_cont | t2_cnt
---------+--------
574 | 1107
(1 行)
时间: 17.182 ms
Hope that helps.
Regards
Stefano Dal Pra wrote:
Hi everybody,
suppose you have a large table tab and two (or more) queryes like this:
SELECT count(*),A FROM tab WHERE C GROUP BY A;
SELECT count(*),B FROM tab WHERE C GROUP BY B;
is there any way to get both results in a single query,
eventually through stored procedure?
The retrieved [count(*),A] ; [count(*),B)] data couldnt fit
on a single table, of course.
The main goal would be to get multiple results while scanning the
table[s] once only
thus getting results in a faster way.
This seems to me quite a common situation but i have no clue whether a neat
solution can be implemented through stored procedure.
Any hint?
Thank you
Stefano
---------------------------(end of broadcast)---------------------------
TIP 3: Have you checked our extensive FAQ?
http://www.postgresql.org/docs/faq