微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PostgreSQL8.4新功能:Window函数

简单介绍一下Postgresql 8.4中新增功能Window函数
Window函数不同于一般的集 函数。不能像集 函数 把复数行 出一行,而是复数行都能 保持自己的属性,不能 访问 其他行的信息。
法如下:
function_name ([ expression [, expression ... ]]) OVER ( window_deFinition )
function_name ([ expression [, expression ... ]]) OVER window_name
function_name ( * ) OVER ( window_deFinition )
function_name ( * ) OVER window_name
其中window_deFinition部分的定义如下:
[ existing_window_name ]
[ PARTITION BY expression [,...] ]
[ ORDER BY expression [ ASC | DESC | USING operator ] [ NULLS { FirsT | LAST } ] [,...] ]
[ frame_clause ]
简单描述就是以下 形式
函数(...) OVER (PARTITION BY ...) : 区 分割
函数(...) OVER (ORDER BY ...) : 每个区 排序
通常的集约函数也能够利用。如count,sum,avg等
主要的Window函数如下:
row_number():行号
rank():排名 ( 序一 候,跳 番号)
dense_rank():排名 ( 序一 候,不跳 番号)
percent_rank():排名 (%百分比表示) : (rank - 1) / (全行数 - 1)
cume_dist():和percent_rank 似 : (現在的行的位置) / (全行数)
ntile(N):排名(1..N 分割)
lag(value,offset,default):排序状 的前面一行的
lead(value,default):排序状 的后面一行的
first_value(value):最初的
last_value(value):最后的
nth_value(value,N):第N行的 (行号从1开始数)
例子1:每个部 工的平均工 工的工 相比
SELECT depname,empno,salary,avg(salary) OVER (PARTITION BY depname) FROM empsalary;
depname | empno | salary | avg部门平均工资
-----------+-------+--------+-----------------------
develop | 11 | 5200 | 5020.0000000000000000
develop | 7 | 4200 | 5020.0000000000000000
develop | 9 | 4500 | 5020.0000000000000000
develop | 8 | 6000 | 5020.0000000000000000
develop | 10 | 5200 | 5020.0000000000000000
personnel | 5 | 3500 | 3700.0000000000000000
personnel | 2 | 3900 | 3700.0000000000000000
sales | 3 | 4800 | 4866.6666666666666667
sales | 1 | 5000 | 4866.6666666666666667
sales | 4 | 4800 | 4866.6666666666666667
(10 rows)
例子2:部门员 工的工 排名
SELECT depname,rank() OVER (PARTITION BY depname ORDER BY salary DESC) FROM empsalary;
depname | empno | salary | rank排名
-----------+-------+--------+------
develop | 8 | 6000 | 1
develop | 10 | 5200 | 2
develop | 11 | 5200 | 2
develop | 9 | 4500 | 4
develop | 7 | 4200 | 5
personnel | 2 | 3900 | 1
personnel | 5 | 3500 | 2
sales | 1 | 5000 | 1
sales | 4 | 4800 | 2
sales | 3 | 4800 | 2
(10 rows)

原文地址:https://www.jb51.cc/postgresql/197201.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐