Re: BUG #7622: Incorrect aggregate level processing - Mailing list pgsql-bugs

From Tom Lane
Subject Re: BUG #7622: Incorrect aggregate level processing
Date
Msg-id 20677.1351259084@sss.pgh.pa.us
Whole thread Raw
In response to BUG #7622: Incorrect aggregate level processing  (andrew@tao11.riddles.org.uk)
List pgsql-bugs
andrew@tao11.riddles.org.uk writes:
> select (select array_agg(random()*i) from (values (1),(2)) v(a)) from
> generate_series(1,3) i;

> Expected output is three rows each with a 2-element array; actual output
> is:

> ERROR:  more than one row returned by a subquery used as an expression

> Looking at the explain, the aggregate is being pulled out of the subplan and
> evaluated at the top query level. (This came up while doing some random data
> generation, I've simplified it a bit.)

This is not a bug, it's the behavior required by SQL standard.  An
aggregate belongs to the lowest query level supplying a variable to it
(except of course when it contains no variable at all).  So it's
effectively an outer-reference constant for that inner select.

            regards, tom lane

pgsql-bugs by date:

Previous
From: andrew@tao11.riddles.org.uk
Date:
Subject: BUG #7622: Incorrect aggregate level processing
Next
From: Владимир Сошенко
Date:
Subject: Installation issue