| PostgreSQL 9.0.4 中文文档 | ||||
|---|---|---|---|---|
| Prev | Fast Backward | Chapter 9. 函数和操作符 | Fast Forward | Next | 
窗口函数提供跨的行相关的当前查询行集执行计算的能力。 见Section 3.5关于此功能的介绍。
Table 9-44列出了内建的窗口函数。注意必须使用窗口函数的语法调用这些函数; 一个OVER子句是必需的。
除了这些函数外,任何内建的或用户定义的聚合函数都可以作为窗口函数(见Section 9.18关于内建聚合函数的列表)。 仅当调用跟着OVER子句的聚合函数,作为窗口函数;否则它们作为常规的聚合。
Table 9-44. General-Purpose Window Functions
| 函数 | 返回类型 | 描述 | 
|---|---|---|
| row_number() | bigint | 在其分区中的当前行号,从1计 | 
| rank() | bigint | 有间隔的当前行排名; 与 row_number同行之首相同 | 
| dense_rank() | bigint | 没有间隔的当前行排名; 这个函数计数对等组。 | 
| percent_rank() | double precision | 当前行的相对排名: ( rank- 1) / (总行数 - 1) | 
| cume_dist() | double precision | 当前行的相对排名: (前面的行数 或 与当前行同行)/(总行数) | 
| ntile(num_bucketsinteger) | integer | 从1到参数值的整数范围,划分尽可能相等段。 | 
|          lag(valueany
             [,offsetinteger
             [,defaultany]])
   | 类型同value | 返回当前行的前offset行,value 的同一字段值。如果没有这样的行,返回default替代。 offset和default 都是当前行计算的结果。如果忽略了,则offset默认是1, default默认是 null。 | 
|          lead(valueany
              [,offsetinteger
              [,defaultany]])
   | 类型同value | 返回当前行的后offset行,value 的同一字段值。如果没有这样的行,返回default替代。 offset和default 都是当前行计算的结果。如果忽略了,则offset默认是1, default默认是 null。 | 
| first_value(valueany) | 类型同value | 返回窗口第一行的value字段值。 | 
| last_value(valueany) | 类型同value | 返回窗口最后一行的value字段值。 | 
|          nth_value(valueany,nthinteger)
   | 类型同value | 返回窗口第nth行的value 字段值(行从1计数);没有这样的行则 null。 | 
在Table 9-44列出所有基于关联窗口定义ORDER BY指定排序子句的函数。 同行是说在ORDER BY排序时不唯一的行。定义的这四个排名函数,对于任何两个同行的答案相同。
   注意first_value,last_value,和nth_value
   只考虑内"window frame",其默认情况下,包含从分区的开始行直到当前行的最后同行。
   像last_value和nth_value有时会给出没有用的结果。
  
   You can redefine the frame by
   adding a suitable frame specification (RANGEor
ROWS) to theOVERclause.
   SeeSection 4.2.8for more information
   about frame specifications.
当一个聚合函数作为窗口函数使用时,将聚合超过当前行的窗框内的行。 一个使用ORDER BY和默认窗框定义处理"运行时求和"类型的行为, 可能不是想要的结果。为了获取超过整个分区聚合,忽略ORDER BY或者使用 ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING。 其它窗框规格可以用来获取其它的效果。
Note: SQL 标准为
lead,lag,first_value,last_value和nth_value定义了 一个RESPECT NULLS或IGNORE NULLS可选项。 在PostgreSQL没有实现:行为总是与标准默认相同,即RESPECT NULLS。 同样用于nth_value的标准FROM FIRST或FROM LAST选项没有实现: 只有支持默认FROM FIRST行为。(你可以通过ORDER BY排序取反获取到FROM LAST的结果。)