On Wed, Sep 6, 2023 at 08:01:30PM -0400, Tom Lane wrote:
> Bruce Momjian <[email protected]> writes:
> > On Tue, Jul 11, 2023 at 07:31:26AM -0700, David G. Johnston wrote:
> >> I think the complaint is that someone seeing the behavior in the wild
> >> comes to
> >> this order-of-operations and doesn't see that the observed behavior is
> >> documented.
>
> > How is the attached patch?
>
> Maybe better "Although query output columns are nominally computed in the
> next step, they can also be referenced (by name or by ordinal number)
> as <literal>GROUP BY</literal> elements".
I modified the text slightly in the attached patch.
> You could go further and add "Such references cannot be parts of
> <literal>GROUP BY</literal> expressions, however." Not sure if we
> cover that explicitly anywhere else.
We do farther down the docs in the GROUP BY section:
https://www.postgresql.org/docs/devel/sql-select.html
GROUP BY will condense into a single row all selected rows that share
the same values for the grouped expressions. An expression used inside a
grouping_element can be an input column name, or the name or ordinal
number of an output column (SELECT list item), or an arbitrary
expression formed from input-column values. In case of ambiguity, a
------------------------
GROUP BY name will be interpreted as an input-column name rather than an
output column name.
It says
* input column name
* output column name or ordinal number
* expression formed from input-column values
Is this too subtle?
--
Bruce Momjian <[email protected]> https://momjian.us
EDB https://enterprisedb.com
Only you can decide what is important to you.
diff --git a/doc/src/sgml/ref/select.sgml b/doc/src/sgml/ref/select.sgml
index 0ee0cc7e64..974153cb78 100644
--- a/doc/src/sgml/ref/select.sgml
+++ b/doc/src/sgml/ref/select.sgml
@@ -130,7 +130,10 @@ TABLE [ ONLY ] <replaceable class="parameter">table_name</replaceable> [ * ]
If the <literal>HAVING</literal> clause is present, it
eliminates groups that do not satisfy the given condition. (See
<xref linkend="sql-groupby"/> and
- <xref linkend="sql-having"/> below.)
+ <xref linkend="sql-having"/> below.)
+ Although query output columns are nominally computed in the next
+ step, they can also be referenced (by name or ordinal number)
+ in the <literal>GROUP BY</literal> clause.
</para>
</listitem>