博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PostgreSQL 10.1 手册_部分 II. SQL 语言_第 9 章 函数和操作符_9.21. 窗口函数
阅读量:5912 次
发布时间:2019-06-19

本文共 1994 字,大约阅读时间需要 6 分钟。

9.21. 窗口函数

窗口函数提供在与当前查询行相关的行集合上执行计算的能力。有关这个特性的介绍请见。 语法细节则请见。

列出了内建的窗口函数。注意必须使用窗口函数的语法调用这些函数,也就是,一个OVER子句是必需的。

除了这些函数外,任何内建的或用户定义的通用或统计聚集(也就是有序集或假想集聚集除外)都可以作为窗口函数(内建聚集函数的列表见)。仅当调用跟着OVER子句时,聚集函数才会作为窗口函数;否则它们作为非窗口的聚集并为剩余的集合返回单行。

表 9.57. 通用窗口函数

函数 返回类型 描述
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 [, offsetinteger [, default anyelement ]]) value的类型相同 返回value, 它在分区内当前行的之前offset个位置的行上计算;如果没有这样的行,返回default替代。 (作为value必须是相同类型)。 offsetdefault都是根据当前行计算的结果。如果忽略它们,则offset默认是1,default默认是空值
lead(value anyelement [, offsetinteger [, default anyelement ]]) value类型相同 返回value,它在分区内当前行的之后offset个位置的行上计算;如果没有这样的行,返回default替代。(作为value必须是相同类型)。offsetdefault都是根据当前行计算的结果。如果忽略它们,则offset默认是1,default默认是空值
first_value(value any) same type as value 返回在窗口帧中第一行上计算的value
last_value(value any) value类型相同 返回在窗口帧中最后一行上计算的value
nth_value(value anynth integer) value类型相同 返回在窗口帧中第nth行(行从1计数)上计算的value;没有这样的行则返回空值

在中列出的所有函数都依赖于相关窗口定义的ORDER BY子句指定的排序顺序。当仅考虑ORDER BY列时,不能区分的行被称为是同等行。定义的这四个排名函数(包括cume_dist) ,对于所有同等行的答案相同。

注意first_valuelast_valuenth_value只考虑窗口帧内的行,它默认情况下包含从分区的开始行直到当前行的最后一个同等行。这对last_value可能不会给出有用的结果,有时对nth_value也一样。你可以通过向OVER子句增加一个合适的帧声明(RANGEROWS)来重定义帧。关于帧声明的更多信息请参考。

当一个聚集函数被用作窗口函数时,它将在当前行的窗口帧内的行上聚集。 一个使用ORDER BY和默认窗口帧定义的聚集产生一种运行时求和类型的行为,这可能是或者不是想要的结果。为了获取在整个分区上的聚集,忽略ORDER BY或者使用ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING。 其它窗口帧声明可以用来获得其它的效果。

注意

SQL 标准为leadlagfirst_valuelast_valuenth_value定义了 一个RESPECT NULLSIGNORE NULLS选项。 这在PostgreSQL中没有实现:行为总是与标准的默认相同,即RESPECT NULLS。 同样,标准中用于nth_valueFROM FIRSTFROM LAST选项没有实现: 只有支持默认的FROM FIRST行为(你可以通过反转ORDER BY的排序达到FROM LAST的结果)。

cume_dist计算小于或等于当前行及其同级的分区行的比例, 而percent_rank计算小于当前行的分区行的比例,假设当前行在分区中不存在。

本文转自PostgreSQL中文社区,原文链接:

转载地址:http://tmmpx.baihongyu.com/

你可能感兴趣的文章
我的友情链接
查看>>
我的友情链接
查看>>
使用Unirest发送Json的格式数据
查看>>
亚洲诚信&华为云 | 双11钜惠提前来袭,错过等一年!
查看>>
目前所学的关键字整理
查看>>
我的友情链接
查看>>
Eclipse常用配置
查看>>
linux修改IP和DNS
查看>>
我的友情链接
查看>>
WordPress新增Page的模版文件
查看>>
WP移动设备压缩与解压控件Xceed Zip for .NET Compact Framework控件下载及详细介绍使用方法...
查看>>
proc文件系统探索 之 根目录下的文件[六]
查看>>
搭建ICINGA监控
查看>>
DataSet
查看>>
第三方分享功能
查看>>
Quartz.NET 前一次任务未执行完成时不触发下次的解决方法
查看>>
SQL中的null值
查看>>
python unittest之断言及示例
查看>>
online_judge_1106
查看>>
JAVA_内部类
查看>>