Re: coalesce and aggregate functions

Поиск
Список
Период
Сортировка
От Heikki Linnakangas
Тема Re: coalesce and aggregate functions
Дата
Msg-id 457ECBB0.2010803@enterprisedb.com
обсуждение исходный текст
Ответ на coalesce and aggregate functions  (Patrick Welche <prlw1@newn.cam.ac.uk>)
Ответы Re: coalesce and aggregate functions  (Patrick Welche <prlw1@newn.cam.ac.uk>)
Список 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


В списке pgsql-hackers по дате отправления:

Предыдущее
От: Patrick Welche
Дата:
Сообщение: coalesce and aggregate functions
Следующее
От: Gregory Stark
Дата:
Сообщение: Re: coalesce and aggregate functions