Re: [PATCH] GROUP BY ALL
Peter Eisentraut <peter@eisentraut.org>
From: Peter Eisentraut <peter@eisentraut.org>
To: pgsql-hackers <pgsql-hackers@postgresql.org>
Cc: Tom Lane <tgl@sss.pgh.pa.us>,
"David G. Johnston" <david.g.johnston@gmail.com>,
David Christensen <david@pgguru.net>, Jelte Fennema-Nio <postgres@jeltef.nl>
Date: 2025-09-26T07:02:08Z
Lists: pgsql-hackers
Commits
Same data as JSON:
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Add GROUP BY ALL.
- ef38a4d9756d 19 (unreleased) landed
-
Refactor to avoid code duplication in transformPLAssignStmt.
- b0fb2c6aa5a4 19 (unreleased) landed
-
Fix missed copying of groupDistinct in transformPLAssignStmt.
- b7f6798c056a 16.11 landed
- 9ca79896aba3 15.15 landed
- 78a284b0b8d4 18.1 landed
- 7504d2be9eb4 19 (unreleased) landed
- 3fc9aa5b0233 17.7 landed
- 0be39b4b1a01 14.20 landed
On 17.08.25 19:12, Jelte Fennema-Nio wrote:
> On Tue, 23 Jul 2024 at 22:02, Peter Eisentraut <peter@eisentraut.org> wrote:
>> Looks like the main existing implementations take it to mean all entries
>> in the SELECT list that are not aggregate functions.
>>
>> https://duckdb.org/docs/sql/query_syntax/groupby.html#group-by-all
>> https://docs.databricks.com/en/sql/language-manual/sql-ref-syntax-qry-select-groupby.html#parameters
>> https://docs.snowflake.com/en/sql-reference/constructs/group-by#parameters
>
> Oracle added support for GROUP BY ALL too now:
> https://danischnider.wordpress.com/2025/08/05/oracle-23-9-supports-group-by-all/
The proposal for GROUP BY ALL was accepted into the SQL standard draft
yesterday. So maybe someone wants to take this up again.
The initially proposed patch appears to have the right idea overall.
But it does not handle more complex cases like
SELECT a, SUM(b)+a FROM t1 GROUP BY ALL;
correctly. The piece of code that does
if (!IsA(n->expr,Aggref))
should be generalized to check for aggregates not only at the top level.
(For explanation: GROUP BY ALL expands to all select list entries that
do not contain aggregates. So the above would expand to
SELECT a, SUM(b)+a FROM t1 GROUP BY a;
which should then be rejected based on the existing rules.)