开窗函数
开窗函数提供了跨越行集执行计算的能力,行集中的行通过某种方式与当前查询行联系在一起。
内置开窗函数列表见表-1。注意调用这些函数必须使用开窗函数语法;也就是需要加上OVER子句。
除了这些函数,任何内置和自定义的聚合函数也可以作为开窗函数使用。聚合函数只有当在调用语句后面加上OVER子句后才会当作开窗函数执行,否则他们就是正常的聚合函数。
表1-常见的开窗函数
函数 | 返回值类型 | 描述 |
row_number() | bigint | 组内当前行的序号,从1开始 |
rank() | bigint | 有间隔排名,多个相同排名的行,各行排名与相同排名行中第一行的行号(即row_number)一致 |
dense_rank() | bigint | 无间隔排名, 这个函数讲相同排名行作为一个整体组进行计数 |
percent_rank() | double precision | 当前行的相对排名:(rank -1 )/(total rows -1) |
cume_dist() | double precision | 当前行的相对排名:(当前行前面的行数或者当前行的同序行的行数)/(总行数) |
ntile(num_buckets integer) | integer | 从1开始到给定参数的整数,将分区内的行尽量均匀分割 |
lag(value any [, offset integer [, default any ]]) | same type as value | 在分区内从当前行向上移动offset行,函数返回的是这行给定的值;如果没有那样的行,则返回默认值;offset和default都是针对当前行的。如果缺省,offset默认为1,default默认为null。 |
lead(value any [, offset integer [, default any ]]) | same type as value | 在分区内从当前行向下移动offset行,函数返回的是这行给定的值;如果没有那样的行,则返回默认值;offset和default都是针对当前行的。如果缺省,offset默认为1,default默认为null。 |
first_value(value any) | same type as value | 返回窗口的第一行给定的值 |
last_value(value any) | same type as value | 返回窗口的最后一行给定的值 |
nth_value(value any, nth integer) | same type as value | 返回窗口第nth行给定的值(从1开始数),如果没有第nth行则为null |
原文地址:https://www.cnblogs.com/heisenburg/p/11560128.html
时间: 2024-11-10 14:27:17