PG中的窗口函数
窗口函数提供在与当前查询行相关的行集合上执行计算的能力。
通用窗口函数
函数 | 返回类型 | 描述 |
---|---|---|
row_number() | bigint | 当前行在其分区中的行号,从1计 |
rank() | bigint | 带间隙的当前行排名;与该行的第一个同等行的row_number相同 |
dense_rank() | bigint | 不带间隙的当前行排名; |
percent_rank() | double precision | 当前行的相对排名:(rank-1)/(总行数-1) |
cume_dist() | double precision | 累计分布:(在当前行之前或者平级的分区行数)/分区行总数 |
ntile(num_buckets integer) | integer | 从1到参数值的整数范围,尽可能等分分区 |
lag(* value* anyelement [, * offset* integer [, * default* anyelement ]]) | 和* value*的类型相同 | 返回*value ,它在分区内当前行的之前offset 个位置的行上计算;如果没有这样的行,返回default 替代(必须和value 类型相同)。offset 和default 都是根据当前行计算的结果。如果忽略它们,则offset 默认是1,default *默认是空值 |
lead(* value* anyelement [, * offset* integer [, * default* anyelement ]]) | 和* value*类型相同 | 返回*value ,它在分区内当前行的之后offset 个位置的行上计算;如果没有这样的行,返回default 替代(必须和value 类型相同)。offset 和default 都是根据当前行计算的结果。如果忽略它们,则offset 默认是1,default *默认是空值 |
first_value(* value* any) | same type as * value* | 返回在窗口帧中第一行上计算的*value * |
last_value(* value* any) | 和* value*类型相同 | 返回在窗口帧中最后一行上计算的*value * |
nth_value(* value* any, * nth* integer) | 和* value*类型相同 | 返回在窗口帧中第*nth 行(行从1计数)上计算的value *;没有这样的行则返回空值 |