diff options
Diffstat (limited to 'doc/src/sgml/ref/select.sgml')
-rw-r--r-- | doc/src/sgml/ref/select.sgml | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/doc/src/sgml/ref/select.sgml b/doc/src/sgml/ref/select.sgml index d7089eac0be..5a3bcff7607 100644 --- a/doc/src/sgml/ref/select.sgml +++ b/doc/src/sgml/ref/select.sgml @@ -37,7 +37,7 @@ SELECT [ ALL | DISTINCT [ ON ( <replaceable class="parameter">expression</replac [ { * | <replaceable class="parameter">expression</replaceable> [ [ AS ] <replaceable class="parameter">output_name</replaceable> ] } [, ...] ] [ FROM <replaceable class="parameter">from_item</replaceable> [, ...] ] [ WHERE <replaceable class="parameter">condition</replaceable> ] - [ GROUP BY [ ALL | DISTINCT ] <replaceable class="parameter">grouping_element</replaceable> [, ...] ] + [ GROUP BY { ALL | [ ALL | DISTINCT ] <replaceable class="parameter">grouping_element</replaceable> [, ...] } ] [ HAVING <replaceable class="parameter">condition</replaceable> ] [ WINDOW <replaceable class="parameter">window_name</replaceable> AS ( <replaceable class="parameter">window_definition</replaceable> ) [, ...] ] [ { UNION | INTERSECT | EXCEPT } [ ALL | DISTINCT ] <replaceable class="parameter">select</replaceable> ] @@ -796,7 +796,7 @@ WHERE <replaceable class="parameter">condition</replaceable> <para> The optional <literal>GROUP BY</literal> clause has the general form <synopsis> -GROUP BY [ ALL | DISTINCT ] <replaceable class="parameter">grouping_element</replaceable> [, ...] +GROUP BY { ALL | [ ALL | DISTINCT ] <replaceable class="parameter">grouping_element</replaceable> [, ...] } </synopsis> </para> @@ -808,21 +808,31 @@ GROUP BY [ ALL | DISTINCT ] <replaceable class="parameter">grouping_element</rep <replaceable class="parameter">grouping_element</replaceable> can be an input column name, or the name or ordinal number of an output column (<command>SELECT</command> list item), or an arbitrary - expression formed from input-column values. In case of ambiguity, + expression formed from input-column values; however, it cannot contain + an aggregate function or a window function. In case of ambiguity, a <literal>GROUP BY</literal> name will be interpreted as an input-column name rather than an output column name. </para> <para> + The form <literal>GROUP BY ALL</literal> with no explicit + <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. + </para> + + <para> If any of <literal>GROUPING SETS</literal>, <literal>ROLLUP</literal> or <literal>CUBE</literal> are present as grouping elements, then the <literal>GROUP BY</literal> clause as a whole defines some number of independent <replaceable>grouping sets</replaceable>. The effect of this is equivalent to constructing a <literal>UNION ALL</literal> between - subqueries with the individual grouping sets as their + subqueries having the individual grouping sets as their <literal>GROUP BY</literal> clauses. The optional <literal>DISTINCT</literal> - clause removes duplicate sets before processing; it does <emphasis>not</emphasis> - transform the <literal>UNION ALL</literal> into a <literal>UNION DISTINCT</literal>. + key word removes duplicate grouping sets before processing; it does <emphasis>not</emphasis> + transform the implied <literal>UNION ALL</literal> into + a <literal>UNION DISTINCT</literal>. For further details on the handling of grouping sets see <xref linkend="queries-grouping-sets"/>. </para> |