窗口函数

更新时间:

窗口函数的主要应用包括在窗口分区内的排序、聚合、排名以及其他复杂计算。云原生数据仓库 AnalyticDB PostgreSQL 版兼容PostgreSQL中所有的窗口函数。本文简单列举云原生数据仓库 AnalyticDB PostgreSQL 版兼容的窗口函数。

PostgreSQL中窗口函数的详细使用方法,请参见PostgreSQL官方文档:窗口函数

通用窗口函数

函数名称

返回类型

row_number()

bigint

当前行在窗口分区中的行号,从1计数。

rank()

bigint

当前行在窗口分区内的排名,排名不连续。如果存在多个相同值,则这些相同值的排名相同,且下一个不同值的排名会跳过相应数量。例如,三个相同值排名为1,那么下一个不同值的排名为4。

dense_rank()

bigint

当前行在窗口分区内的排名,排名连续。如果存在多个相同值,则这些相同值的排名相同,且下一个不同值的排名不会跳过相应数量。例如,三个相同值排名为1,那么下一个不同值的排名为2。

percent_rank()

double precision

当前行在窗口分区内的相对排名,返回值在01之间。计算公式为: (rank-1) / (窗口分区的总行数-1)。其中rank为该行数据的rank()窗口函数的返回结果。相同值有相同的percent_rank()值。

cume_dist()

double precision

返回当前行的累积分布,计算公式为:(在当前行之前的行数+与当前行值相同的行数) / 窗口分区总行数。

ntile(number_buckets)

integer

将窗口分区内的数据尽可能等分为指定的份数,并返回当前行所在的数据等份的编号,number_buckets必须为正整数。

lag(column [,offset [,default]])

column的类型相同。

返回窗口分区内当前行前面第n(noffset的取值)行的值。如果当前行为第1行,则返回默认值。

  • offset:相对于当前行的偏移行数,默认值为1。

  • default:可选的默认值,当偏移的目标行不存在时返回该值,默认值为空。

lead(column[,offset [,default]])

column的类型相同。

返回窗口分区内当前行后面第n(noffset的取值)行的值。如果当前行为最后一行,则返回默认值。

  • offset:相对于当前行的偏移行数,默认值为1。

  • default:可选的默认值,当偏移的目标行不存在时返回该值,默认值为空。

first_value(column)

column的类型相同。

返回每个窗口分区的第一行的值。

last_value(column)

column的类型相同。

返回每个窗口分区的最后一行的值。

nth_value(column,nth)

column的类型相同。

返回每个窗口分区的第n行数据(行从1计数,nth必须为正整数),如果不存在第n行则返回空值。

说明

nth_value(column,1)等效于first_value(column)