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)

相关文章

项目需要,有个数据需要导入,拿到手一开始以为是mysql,结果...
本文小编为大家详细介绍“怎么查看PostgreSQL数据库中所有表...
错误现象问题原因这是在远程连接时pg_hba.conf文件没有配置正...
因本地资源有限,在公共测试环境搭建了PGsql环境,从数据库本...
wamp 环境 这个提示就是说你的版本低于10了。 先打印ph...
psycopg2.OperationalError: SSL SYSCALL error: EOF detect...