Postgresql window function 第一篇
window function,简单来说就是窗口函数。postgresql 在8.4版本开始有了窗口函数的特性。
看多很多中文解释,找不到合适的解释什么是窗口函数,有句英文很好的诠释了什么是窗口函数。 “The whole idea behind window functions is to allow you to process several values of the result set at a time: you see through the window some peer rows and are able to compute a single output value from them,much like when using an aggregate function. ”先来介绍一下postgresql里面关于窗口函数的语法吧。
function name over ( partition by column order by column [ RANGE | ROWS ] BETWEEN frame_start AND frame_end);
这是简化的版本,官网上对于语句写的更详细,有兴趣的可以自己去看看。对于第一次看见的人来说,这么长的语法可能一下子无法接受,那我们就慢慢一步一步来的说。
首先创建下面这张表
点击(此处)折叠或打开
- createtableempsalary
- (
- depnamevarchar(20),
- empno
- salaryinteger
- )
点击(此处)折叠或打开
postgres=#select*fromempsalary;
depname|empno|salary
----------+-------+--------
develop|11|5200
develop|7|4200
develop|9|4500
personel|5|3500
personel|6|6500
personel|12|15|8900
(7 行记录)
只使用 function name over(),这是窗口函数使用最简单的方式了吧。
点击(此处)折叠或打开
selectdepnamesalarysum(salary)over(|salary|sum
----------+-------+--------+-------
develop|5200|39300
develop|4200|4500|39300
personel|3500|6500|8900|39300
)
关于窗口函数就先写到这里吧。
Postgresql window function 第二篇
上一篇很好的解释了什么是窗口函数,并且举了一个最简单的例子,帮助理解什么是窗口函数。接下来我们来更深入的理解postgresql的窗口函数。还是借用上一篇新建的表来讲解。
点击(此处)折叠或打开
\\d empsalary
资料表\"public.empsalary\"
栏位|型别|修饰词
---------+-----------------------+--------
depname|character varying|
empno|
salary|integer|
function name over ( partition by column) 这里的partition by 子句用于对行进行分组的。
点击(此处)折叠或打开
(partitionbydepname) fromempsalary;
depname|13900
develop|13900
personel|25400
personel|25400
)