Re: [PATCH] GROUP BY ALL - Mailing list pgsql-hackers

From David G. Johnston
Subject Re: [PATCH] GROUP BY ALL
Date
Msg-id CAKFQuwZ2MoUqWv0oKX4M0d85k92HugdF=1qJzhoC1pO20ywWYA@mail.gmail.com
Whole thread
In response to Re: [PATCH] GROUP BY ALL  (Peter Eisentraut <peter@eisentraut.org>)
List pgsql-hackers
On Tuesday, April 14, 2026, Peter Eisentraut <peter@eisentraut.org> wrote:

I don't see any mention of using GROUP BY with window functions in our relevant documentation, for example

https://www.postgresql.org/docs/devel/sql-expressions.html#SYNTAX-WINDOW-FUNCTIONS
https://www.postgresql.org/docs/devel/functions-window.html

The select reference page covers this.  But the window clause could get better treatment, it’s buried in step 5.



Commit ef38a4d9756 added a regression test

EXPLAIN (COSTS OFF) SELECT a, COUNT(a) OVER (PARTITION BY a) FROM t1 GROUP BY ALL;

but the test table contains no data, so I don't know if this kind of query produces interesting information.

Each non-null value of “a” would have an output of 1, while a null valued “a” would have an output of 0.  “A” is grouped since all expressions involving “a” are non-aggregated.  The equivalent rewrite is:

Select a, count(a_expr) over … from ( — step 5
    select a, a as a_expr from tbl group by all. — step 4
);

For purposes of group by all one would erase/ignore the actual window wrapper while leaving the expressions it operates over in place.  This extends from “window expressions are processed after group by/having” documented in SELECT.  IOW, group by all resolves during processing step 4 with intermediate results for the expressions within the window functions, then step 5 removes the intermediate expressions that don’t appear in the final output while adding in the results of processing the window functions.

David J.

pgsql-hackers by date:

Previous
From: Shlok Kyal
Date:
Subject: Re: Support EXCEPT for ALL SEQUENCES publications
Next
From: "Hayato Kuroda (Fujitsu)"
Date:
Subject: RE: Parallel Apply