postgres.git / summary / log / commit / refs

commit    2ce74583652fb4cd29299a220ff31043adf5c96e
Author:   Peter Eisentraut <peter@eisentraut.org>
Date:     Tue Jul 07 06:37:15 2026 +0000

    Update GROUP BY ALL comments about window functions
    
    When GROUP BY ALL was added in commit ef38a4d9756, 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


doc/src/sgml/queries.sgml | 2 +- doc/src/sgml/ref/select.sgml | 3 ++- src/backend/parser/parse_clause.c | 4 +--- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/doc/src/sgml/queries.sgml b/doc/src/sgml/queries.sgml index d8d4c3c53ef..b3cfbc93582 100644 --- a/doc/src/sgml/queries.sgml +++ b/doc/src/sgml/queries.sgml @@ -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> diff --git a/doc/src/sgml/ref/select.sgml b/doc/src/sgml/ref/select.sgml index 09b6ce809bb..8d5a751af7e 100644 --- a/doc/src/sgml/ref/select.sgml +++ b/doc/src/sgml/ref/select.sgml @@ -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> diff --git a/src/backend/parser/parse_clause.c b/src/backend/parser/parse_clause.c index 881fba2e7b5..2f7333e6786 100644 --- a/src/backend/parser/parse_clause.c +++ b/src/backend/parser/parse_clause.c @@ -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))