9.22. Window Functions
Window functions provide the ability to perform calculations across sets of rows that are related to the current query row. See Section 3.5 for an introduction to this feature, and Section 4.2.8 for syntax details.
  The built-in window functions are listed in
  
   Table 9.65
  
  .  Note that these functions
  
   
    must
   
  
  be invoked using window function syntax, i.e., an
  
   OVER
  
  clause is required.
 
  In addition to these functions, any built-in or user-defined
   ordinary aggregate (i.e., not ordered-set or hypothetical-set aggregates)
   can be used as a window function; see
  
   Section 9.21
  
  for a list of the built-in aggregates.
   Aggregate functions act as window functions only when an
  
   OVER
  
  clause follows the call; otherwise they act as plain aggregates
   and return a single row for the entire set.
 
Table 9.65. General-Purpose Window Functions
  All of the functions listed in
  
   Table 9.65
  
  depend on the sort ordering
   specified by the
  
   ORDER BY
  
  clause of the associated window
   definition.  Rows that are not distinct when considering only the
  
   ORDER BY
  
  columns are said to be
  
   peers
  
  .
   The four ranking functions (including
  
   cume_dist
  
  ) are
   defined so that they give the same answer for all rows of a peer group.
 
  Note that
  
   first_value
  
  ,
  
   last_value
  
  , and
  
   nth_value
  
  consider only the rows within the
  
   "
   
    window
   frame
   
   "
  
  , which by default contains the rows from the start of the
   partition through the last peer of the current row.  This is
   likely to give unhelpful results for
  
   last_value
  
  and
   sometimes also
  
   nth_value
  
  .  You can redefine the frame by
   adding a suitable frame specification (
  
   RANGE
  
  ,
  
   ROWS
  
  or
  
   GROUPS
  
  ) to
   the
  
   OVER
  
  clause.
   See
  
   Section 4.2.8
  
  for more information
   about frame specifications.
 
  When an aggregate function is used as a window function, it aggregates
   over the rows within the current row's window frame.
   An aggregate used with
  
   ORDER BY
  
  and the default window frame
   definition produces a
  
   "
   
    running sum
   
   "
  
  type of behavior, which may or
   may not be what's wanted.  To obtain
   aggregation over the whole partition, omit
  
   ORDER BY
  
  or use
  
   ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
  
  .
   Other frame specifications can be used to obtain other effects.
 
Note
   The SQL standard defines a
   
    RESPECT NULLS
   
   or
   
    IGNORE NULLS
   
   option for
   
    lead
   
   ,
   
    lag
   
   ,
   
    first_value
   
   ,
   
    last_value
   
   , and
   
    nth_value
   
   .  This is not implemented in
   
    PostgreSQL
   
   : the behavior is always the
    same as the standard's default, namely
   
    RESPECT NULLS
   
   .
    Likewise, the standard's
   
    FROM FIRST
   
   or
   
    FROM LAST
   
   option for
   
    nth_value
   
   is not implemented: only the
    default
   
    FROM FIRST
   
   behavior is supported.  (You can achieve
    the result of
   
    FROM LAST
   
   by reversing the
   
    ORDER BY
   
   ordering.)