Update GROUP BY ALL comments about window functions

When GROUP BY ALL was added in commit ef38a4d975, the SQL standard
working draft was silent on what to do with window functions.  This
has now been fixed in the SQL standard working draft.  Update the
documentation and code comments about that.

Also make the documentation more specific that we are only talking
about aggregate functions referring to the same query level, which is
another thing that has been made more precise in the SQL standard
working draft since.

The PostgreSQL implementation was already doing the right thing for
both aspects, so no functionality changes.

Reviewed-by: Tom Lane <tgl@sss.pgh.pa.us>
Discussion: https://www.postgresql.org/message-id/flat/CAHM0NXjz0kDwtzoe-fnHAqPB1qA8_VJN0XAmCgUZ%2BiPnvP5LbA%40mail.gmail.com
This commit is contained in:
Peter Eisentraut 2026-07-07 08:37:15 +02:00
parent 4c75cc7863
commit 2ce7458365
3 changed files with 4 additions and 5 deletions

View file

@ -1162,7 +1162,7 @@ SELECT product_id, p.name, (sum(s.units) * p.price) AS sales
<para>
PostgreSQL also supports the syntax <literal>GROUP BY ALL</literal>,
which is equivalent to explicitly writing all select-list entries that
do not contain either an aggregate function or a window function.
do not contain either an aggregate function referring to the same query level or a window function.
This can greatly simplify ad-hoc exploration of data.
As an example, these queries are equivalent:
<screen>

View file

@ -862,7 +862,8 @@ GROUP BY { ALL | [ ALL | DISTINCT ] <replaceable class="parameter">grouping_elem
<replaceable class="parameter">grouping_elements</replaceable>
provided is equivalent to writing <literal>GROUP BY</literal> with the
numbers of all <command>SELECT</command> output columns that do not
contain either an aggregate function or a window function.
contain either an aggregate function referring to the same query level or
a window function.
</para>
<para>

View file

@ -2817,9 +2817,7 @@ transformGroupClause(ParseState *pstate, List *grouplist, bool groupByAll,
/*
* Likewise, TLEs containing window functions are not okay to add
* to GROUP BY. At this writing, the SQL standard is silent on
* what to do with them, but by analogy to aggregates we'll just
* skip them.
* to GROUP BY, and the SQL standard directs us to skip them.
*/
if (pstate->p_hasWindowFuncs &&
contain_windowfuncs((Node *) tle->expr))