PostgreSQL8.4新功能:Window函数

前端之家收集整理的这篇文章主要介绍了PostgreSQL8.4新功能:Window函数前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_403_0@ 简单介绍一下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)

猜你在找的Postgre SQL相关文章