I have used your notes below to rewrite the Window function SQL manual
section.  As you said, it was very hard to read.  I now understand it
better, having restructured it, and I hope others do too.

After waiting 30 minutes for our developer doc build to refresh, I am
giving up and posting my own URL for the doc changes:

        http://momjian.us/tmp/pgsql/sql-expressions.html#SYNTAX-WINDOW-FUNCTIONS

Perhaps I need to go back to having my own doc build.

---------------------------------------------------------------------------

On Mon, Oct 17, 2011 at 11:48:38AM +0200, Florian Pflug wrote:
> On Oct17, 2011, at 01:09 , Tom Lane wrote:
> > Florian Pflug <f...@phlo.org> writes:
> >> ... reading those parts again, I realize the it says "When ORDER BY is 
> >> omitted
> >> the *default* frame consists ... ", and that the second quote is followed
> >> by a footnote which says
> > 
> >>  There are options to define the window frame in other ways, but this 
> >> tutorial
> >>  does not cover them. See Section 4.2.8 for details. [3.5, Window 
> >> Functions]
> > 
> >> So it was just me being thick. Sorry for the noise.
> > 
> > Hmm.  Maybe the use of a <footnote> there is too subtle, and we should
> > instead have that text in-line (probably in parentheses)?  Or we could
> > use a <note>, but that's probably too much emphasis.
> 
> Inline and in parentheses sounds fine.
> 
> In addition, I think we should reword the explanation in 4.2.8 (The SQL 
> Language
> / SQL Syntax / Value Expressions / Window Functions). Instead of that rather
> long (and IMHO hard to read) paragraph about possible frame clauses and their
> behaviour in the presence or absence of an ORDER BY clause, we should go with
> a more algorithmic explanation I think.
> 
> Something along these lines maybe:
> 
> ----------
> .) PARTITION BY splits the rows into disjoint partitions. All further 
> processing
>    happens only inside a single partition
> 
> .) In RANGE mode, ORDER BY then splits each partition into an ordered list of
>    sub-partitions, each containing rows which the ORDER BY considers to be
>    equivalent.
> 
> .) In ROWS mode, OTOH, each sub-partition contains only a single row. Thus, if
>    there are rows which are considered to be equivalent by the ORDER BY, the
>    ordering of the sub-partition isn't fully determined.
> 
> .) Each row's frame then consists of some consecutive range of sub-partitions.
> 
> .) In RANGE mode, that consecutive range can only start at either the first
>    sub-partition or the current row's sub-partition, and can only end at 
> either
>    the current row's sub-partition or the last sub-partitions.
> 
> .) In ROWS mode, the consecutive range may additional start <n> sub-partitions
>    (or rows, it's the same thing here) before the current row, and may 
> additionally
>    end <m> sub-partitions/rows after the current row.
> 
> >From that, it follows that even with an underspecified sort order, the 
> >contents of
> each frame are still fully determined in RANGE mode. The ordering of rows 
> within
> a frame is not determined, though. So overall, in RANGE mode, a query's 
> result is
> only non-deterministic if the window function is sensitive to the ordering of 
> rows
> within a frame.
> 
> In ROWS mode, OTOH, the contents each frame themselves are not fully 
> determined,
> so even an ordering agnostic window function may produce non-deterministic 
> results.
> ----------
> 
> If you think that something along these lines would be an improvement, I can 
> try
> to come up with a patch.
> 
> best regards,
> Florian Pflug
> 
> 
> -- 
> Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-hackers

-- 
  Bruce Momjian  <br...@momjian.us>        http://momjian.us
  EnterpriseDB                             http://enterprisedb.com

  + It's impossible for everything to be true. +


-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to