Andrew Gierth <andrew@tao11.riddles.org.uk> writes:
> There's also the question of ungrouped vars, maybe. Consider these two
> queries:
> select array(select a+sum(x) from (values (0.3),(0.7)) v(a) group by a)
> from generate_series(1,5) g(x);
> select array(select percentile_disc(a) within group (order by x)
> from (values (0.3),(0.7)) v(a) group by a)
> from generate_series(1,5) g(x);
> In both cases the aggregation query is the outer one; but while the first
> can return a value, I think the second one has to fail (at least I can't
> see any reasonable way of executing it).
Hm, interesting. So having decided that the agg has level 1, we need to
reject any level-0 vars in the direct parameters, grouped or not.
We could alternatively decide that the agg has level 0, but that doesn't
seem terribly useful, and I think it's not per spec either. SQL:2008
section 6.9 <set function specification> seems pretty clear that
only aggregated arguments should be considered when determining the
semantic level of an aggregate. OTOH, I don't see any text there
restricting what can be in the non-aggregated arguments, so maybe the
committee thinks this case is sensible? Or they just missed it.
regards, tom lane