mirror of
				https://github.com/postgres/postgres.git
				synced 2025-11-04 00:02:52 -05:00 
			
		
		
		
	Rewrite window function reference section to more clearly explain
keywords and concepts, based on suggestions by Florian Pflug.
This commit is contained in:
		
							parent
							
								
									7c97f6a0cb
								
							
						
					
					
						commit
						d5816d11af
					
				@ -1742,11 +1742,16 @@ UNBOUNDED FOLLOWING
 | 
			
		||||
   <para>
 | 
			
		||||
    Here, <replaceable>expression</replaceable> represents any value
 | 
			
		||||
    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, except that their
 | 
			
		||||
    <literal>PARTITION BY</> behaves like a <literal>GROUP
 | 
			
		||||
    BY</> clause by grouping rows into partitions, except its
 | 
			
		||||
    expressions are always just expressions and cannot be output-column
 | 
			
		||||
    names or numbers.
 | 
			
		||||
    names or numbers.   <literal>ORDER BY</> behaves similar to a
 | 
			
		||||
    query-level <literal>ORDER BY</> clause, except it controls the
 | 
			
		||||
    order rows are supplied to the aggregate function within the window
 | 
			
		||||
    frame, and with the same expression restrictions.
 | 
			
		||||
   </para>
 | 
			
		||||
 | 
			
		||||
   <para>
 | 
			
		||||
    <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
 | 
			
		||||
@ -1760,39 +1765,48 @@ UNBOUNDED FOLLOWING
 | 
			
		||||
    page for details.
 | 
			
		||||
   </para>
 | 
			
		||||
 | 
			
		||||
   <para>
 | 
			
		||||
    In <literal>RANGE</> mode, <literal>CURRENT ROW</> starts with
 | 
			
		||||
    the current row's first peer that <literal>ORDER BY</>
 | 
			
		||||
    considers equivalent, and ends with its last equivalent peer.  In 
 | 
			
		||||
    <literal>ROWS</> mode, <literal>CURRENT ROW</> simply starts and ends
 | 
			
		||||
    with the current row.
 | 
			
		||||
   </para>
 | 
			
		||||
 | 
			
		||||
   <para>
 | 
			
		||||
    <literal>UNBOUNDED PRECEDING</> means that the frame
 | 
			
		||||
    starts with the first row of the partition, and similarly
 | 
			
		||||
    <literal>UNBOUNDED FOLLOWING</> means that the frame ends with the last
 | 
			
		||||
    row of the partition.
 | 
			
		||||
    The <replaceable>value</> <literal>PRECEDING</> and
 | 
			
		||||
    <replaceable>value</> <literal>FOLLOWING</> cases are currently only
 | 
			
		||||
    allowed in <literal>ROWS</> mode.  They indicate that the frame starts
 | 
			
		||||
    or ends the specified number of rows before or after the current row.
 | 
			
		||||
    <replaceable>value</replaceable> must be an integer expression not
 | 
			
		||||
    containing any variables, aggregate functions, or window functions.
 | 
			
		||||
    The value must not be null or negative; but it can be zero, which
 | 
			
		||||
    just selects the current row.
 | 
			
		||||
   </para>
 | 
			
		||||
 | 
			
		||||
   <para>
 | 
			
		||||
    The <replaceable class="parameter">frame_clause</replaceable> specifies
 | 
			
		||||
    the set of rows constituting the <firstterm>window frame</>, for those
 | 
			
		||||
    window functions that act on the frame instead of the whole partition.
 | 
			
		||||
    If <replaceable>frame_end</> is omitted it defaults to <literal>CURRENT
 | 
			
		||||
    ROW</>.  Restrictions are that
 | 
			
		||||
    The default framing option is <literal>RANGE UNBOUNDED PRECEDING</>,
 | 
			
		||||
    which is the same as <literal>RANGE BETWEEN UNBOUNDED PRECEDING AND
 | 
			
		||||
    CURRENT ROW</>.  This sets the frame to be all rows from the partition start
 | 
			
		||||
    up through the current row's last peer as specified by <literal>ORDER BY</>,
 | 
			
		||||
    or all partition rows if there is no <literal>ORDER BY</>.
 | 
			
		||||
   </para>
 | 
			
		||||
 | 
			
		||||
   <para>
 | 
			
		||||
    Restrictions are that
 | 
			
		||||
    <replaceable>frame_start</> cannot be <literal>UNBOUNDED FOLLOWING</>,
 | 
			
		||||
    <replaceable>frame_end</> cannot be <literal>UNBOUNDED PRECEDING</>,
 | 
			
		||||
    and the <replaceable>frame_end</> choice cannot appear earlier in the
 | 
			
		||||
    above list than the <replaceable>frame_start</> choice — for example
 | 
			
		||||
    <literal>RANGE BETWEEN CURRENT ROW AND <replaceable>value</>
 | 
			
		||||
    PRECEDING</literal> is not allowed.
 | 
			
		||||
    The default framing option is <literal>RANGE UNBOUNDED PRECEDING</>,
 | 
			
		||||
    which is the same as <literal>RANGE BETWEEN UNBOUNDED PRECEDING AND
 | 
			
		||||
    CURRENT ROW</>; it sets the frame to be all rows from the partition start
 | 
			
		||||
    up through the current row's last peer in the <literal>ORDER BY</>
 | 
			
		||||
    ordering (which means all rows if there is no <literal>ORDER BY</>).
 | 
			
		||||
    In general, <literal>UNBOUNDED PRECEDING</> means that the frame
 | 
			
		||||
    starts with the first row of the partition, and similarly
 | 
			
		||||
    <literal>UNBOUNDED FOLLOWING</> means that the frame ends with the last
 | 
			
		||||
    row of the partition (regardless of <literal>RANGE</> or <literal>ROWS</>
 | 
			
		||||
    mode).  In <literal>ROWS</> mode, <literal>CURRENT ROW</>
 | 
			
		||||
    means that the frame starts or ends with the current row; but in
 | 
			
		||||
    <literal>RANGE</> mode it means that the frame starts or ends with
 | 
			
		||||
    the current row's first or last peer in the <literal>ORDER BY</> ordering.
 | 
			
		||||
    The <replaceable>value</> <literal>PRECEDING</> and
 | 
			
		||||
    <replaceable>value</> <literal>FOLLOWING</> cases are currently only
 | 
			
		||||
    allowed in <literal>ROWS</> mode.  They indicate that the frame starts
 | 
			
		||||
    or ends with the row that many rows before or after the current row.
 | 
			
		||||
    <replaceable>value</replaceable> must be an integer expression not
 | 
			
		||||
    containing any variables, aggregate functions, or window functions.
 | 
			
		||||
    The value must not be null or negative; but it can be zero, which
 | 
			
		||||
    selects the current row itself.
 | 
			
		||||
   </para>
 | 
			
		||||
 | 
			
		||||
   <para>
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user