Re: [SQL] How do I optimize this?

2009-03-18 Thread Richard Huxton
Wei Weng wrote:
 I made a mistake in the queries:
 
 They should be
 
 update T set t1 = b.aa FROM (select COUNT(1) as aa FROM D WHERE D.da =
 1) as b where tkey = value;
 update T set t2 = b.aa FROM (select COUNT(1) as aa FROM D WHERE D.da =
 2) as b where tkey = value;
 ...
 update T set t10 = b.aa FROM (select COUNT(1) as aa FROM D WHERE D.da =
 10) as b where tkey = value;

You should be able to generate all the counts from one scan:

UPDATE T set t1 = b.a1, t2 = b.a2 ...
FROM (
  SELECT
sum(CASE WHEN D.da=1 THEN 1 ELSE 0 END) AS a1,
sum(CASE WHEN D.da=2 THEN 1 ELSE 0 END) AS a2,
...
  FROM D
) AS b
WHERE tkey = value

You might also want to look at the crosstab functions in the tablefunc
contrib module (see appendix F of the manuals).

-- 
  Richard Huxton
  Archonet Ltd

-
Sent via pgsql-sql mailing list (pgsql-sql@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-sql


[SQL] How do I optimize this?

2009-03-17 Thread Wei Weng

Hi all.

I have the following scenario:

A table T (int t1; int t2; ... int t10; int tkey)
A table D (int da; int db),

And I have the following query
update T set t1 = b.aa FROM (select COUNT(1) as aa FROM D WHERE D.da = 
count) as b where tkey = value;
update T set t2 = b.aa FROM (select COUNT(1) as aa FROM D WHERE D.da = 
count) as b where tkey = value;

...
update T set t10 = b.aa FROM (select COUNT(1) as aa FROM D WHERE D.da = 
count) as b where tkey = value;


The queries are run on the same value. Is there anyway to optimize this???


Thanks
Wei




--
Sent via pgsql-sql mailing list (pgsql-sql@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-sql


Re: [SQL] How do I optimize this?

2009-03-17 Thread Wei Weng

I made a mistake in the queries:

They should be

update T set t1 = b.aa FROM (select COUNT(1) as aa FROM D WHERE D.da = 
1) as b where tkey = value;
update T set t2 = b.aa FROM (select COUNT(1) as aa FROM D WHERE D.da = 
2) as b where tkey = value;

...
update T set t10 = b.aa FROM (select COUNT(1) as aa FROM D WHERE D.da = 
10) as b where tkey = value;


Thanks
Wei

On 03/17/2009 05:43 PM, Wei Weng wrote:

Hi all.

I have the following scenario:

A table T (int t1; int t2; ... int t10; int tkey)
A table D (int da; int db),

And I have the following query
update T set t1 = b.aa FROM (select COUNT(1) as aa FROM D WHERE D.da = 
count) as b where tkey = value;
update T set t2 = b.aa FROM (select COUNT(1) as aa FROM D WHERE D.da = 
count) as b where tkey = value;

...
update T set t10 = b.aa FROM (select COUNT(1) as aa FROM D WHERE D.da 
= count) as b where tkey = value;


The queries are run on the same value. Is there anyway to optimize 
this???



Thanks
Wei






--
Sent via pgsql-sql mailing list (pgsql-sql@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-sql