Re: coalesce and aggregate functions
Heikki Linnakangas <heikki@enterprisedb.com>
From: Heikki Linnakangas <heikki@enterprisedb.com>
To: Patrick Welche <prlw1@newn.cam.ac.uk>
Cc: pgsql-hackers@postgresql.org
Date: 2006-12-12T15:33:04Z
Lists: pgsql-hackers
Patrick Welche wrote: > Is this a bug, or don't I understand coalesce()? > > create table test (a int, b int); > insert into test values (1,null); > insert into test values (2,1); > insert into test values (2,2); > select * from test; -- returns: > select sum(b) from test where a=1; -- null > select sum(b) from test where a=2; -- 3 > select coalesce(0,sum(b)) from test where a=1; -- 0 > select coalesce(0,sum(b)) from test where a=2; -- 0 > delete from test where a=1; > select coalesce(0,sum(b)) from test where a=2; -- 0 ! > > So when I use coalesce() with sum(), I always get the constant. I would > have expected it only in the case where sum() returns null.. Coalesce returns the first non-null argument. In your example, 0 is always the first non-null argument. You should be doing this instead: select coalesce(sum(b),0) from test where a=2; to get the desired effect. BTW: This type of questions really belong to pgsql-general or pgsql-novice, this list is for discussing development of PostgreSQL itself. -- Heikki Linnakangas EnterpriseDB http://www.enterprisedb.com