summaryrefslogtreecommitdiff
path: root/doc/src
diff options
context:
space:
mode:
authorTom Lane2009-08-27 20:08:12 +0000
committerTom Lane2009-08-27 20:08:12 +0000
commit3f2fa308d14635a3936c0b62f8f05631d6362a27 (patch)
treec13330c7ff2eb7257f8d537d0d6e71e82489e724 /doc/src
parent6c593b9ca0fdf2cf6a451abc55002f94a6d34ed2 (diff)
Modify the definition of window-function PARTITION BY and ORDER BY clauses
so that their elements are always taken as simple expressions over the query's input columns. It originally seemed like a good idea to make them act exactly like GROUP BY and ORDER BY, right down to the SQL92-era behavior of accepting output column names or numbers. However, that was not such a great idea, for two reasons: 1. It permits circular references, as exhibited in bug #5018: the output column could be the one containing the window function itself. (We actually had a regression test case illustrating this, but nobody thought twice about how confusing that would be.) 2. It doesn't seem like a good idea for, eg, "lead(foo) OVER (ORDER BY foo)" to potentially use two completely different meanings for "foo". Accordingly, narrow down the behavior of window clauses to use only the SQL99-compliant interpretation that the expressions are simple expressions.
Diffstat (limited to 'doc/src')
-rw-r--r--doc/src/sgml/ref/select.sgml21
-rw-r--r--doc/src/sgml/syntax.sgml6
2 files changed, 18 insertions, 9 deletions
diff --git a/doc/src/sgml/ref/select.sgml b/doc/src/sgml/ref/select.sgml
index 9675adcbf86..96442a93084 100644
--- a/doc/src/sgml/ref/select.sgml
+++ b/doc/src/sgml/ref/select.sgml
@@ -1,5 +1,5 @@
<!--
-$PostgreSQL: pgsql/doc/src/sgml/ref/select.sgml,v 1.122 2009/05/03 20:45:43 tgl Exp $
+$PostgreSQL: pgsql/doc/src/sgml/ref/select.sgml,v 1.122.2.1 2009/08/27 20:08:12 tgl Exp $
PostgreSQL documentation
-->
@@ -595,18 +595,25 @@ WINDOW <replaceable class="parameter">window_name</replaceable> AS ( <replaceabl
<para>
The elements of the <literal>PARTITION BY</> list are interpreted in
- the same fashion as elements of a
- <xref linkend="sql-groupby" endterm="sql-groupby-title">, and
- the elements of the <literal>ORDER BY</> list are interpreted in the
- same fashion as elements of an
- <xref linkend="sql-orderby" endterm="sql-orderby-title">.
- The only difference is that these expressions can contain aggregate
+ much the same fashion as elements of a
+ <xref linkend="sql-groupby" endterm="sql-groupby-title">, except that
+ they are always simple expressions and never the name or number of an
+ output column.
+ Another difference is that these expressions can contain aggregate
function calls, which are not allowed in a regular <literal>GROUP BY</>
clause. They are allowed here because windowing occurs after grouping
and aggregation.
</para>
<para>
+ Similarly, the elements of the <literal>ORDER BY</> list are interpreted
+ in much the same fashion as elements of an
+ <xref linkend="sql-orderby" endterm="sql-orderby-title">, except that
+ the expressions are always taken as simple expressions and never the name
+ or number of an output column.
+ </para>
+
+ <para>
The optional <replaceable class="parameter">frame_clause</> defines
the <firstterm>window frame</> for window functions that depend on the
frame (not all do). It can be one of
diff --git a/doc/src/sgml/syntax.sgml b/doc/src/sgml/syntax.sgml
index bc562e1f97b..db3d9982d8e 100644
--- a/doc/src/sgml/syntax.sgml
+++ b/doc/src/sgml/syntax.sgml
@@ -1,4 +1,4 @@
-<!-- $PostgreSQL: pgsql/doc/src/sgml/syntax.sgml,v 1.133 2009/06/17 21:58:49 tgl Exp $ -->
+<!-- $PostgreSQL: pgsql/doc/src/sgml/syntax.sgml,v 1.133.2.1 2009/08/27 20:08:12 tgl Exp $ -->
<chapter id="sql-syntax">
<title>SQL Syntax</title>
@@ -1619,7 +1619,9 @@ ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
expression that does not itself contain window function calls.
The <literal>PARTITION BY</> and <literal>ORDER BY</> lists have
essentially the same syntax and semantics as <literal>GROUP BY</>
- and <literal>ORDER BY</> clauses of the whole query.
+ and <literal>ORDER BY</> clauses of the whole query, except that their
+ expressions are always just expressions and cannot be output-column
+ names or numbers.
<replaceable>window_name</replaceable> is a reference to a named window
specification defined in the query's <literal>WINDOW</literal> clause.
Named window specifications are usually referenced with just