PostgreSQL window function
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); 这是简化的版本,官网上对于语句写的更详细,有兴趣的可以自己去看看。对于第一次看见的人来说,这么长的语法可能一下子无法接受,那我们就慢慢一步一步来的说。 首先创建下面这张表 点击(此处)折叠或打开
点击(此处)折叠或打开 postgres=#select*fromempsalary;
只使用 function name over(),这是窗口函数使用最简单的方式了吧。 点击(此处)折叠或打开 selectdepnamesalarysum(salary)over(|salary|sum
关于窗口函数就先写到这里吧。
Postgresql window function 第二篇
上一篇很好的解释了什么是窗口函数,并且举了一个最简单的例子,帮助理解什么是窗口函数。接下来我们来更深入的理解postgresql的窗口函数。还是借用上一篇新建的表来讲解。 点击(此处)折叠或打开 d empsalary
function name over ( partition by column) 这里的partition by 子句用于对行进行分组的。 点击(此处)折叠或打开 (partitionbydepname) fromempsalary;
由于这次对窗口进行了限制,每一行只能看见自己的分组,所以develop组的sum都是一样的,而personel组的sum是一样的。
EXAMPLE3: function name over (order by column) 点击(此处)折叠或打开 orderbysalaryfrom
点击(此处)折叠或打开 )
EXAMPLE 3: function name over (order by column [rows | range] betweenframestart and frameend); rows between 子句无法独自和over一起使用,这个子句的作用也是决定了那些行可以被每一行看到。 点击(此处)折叠或打开 rowsbetween unbounded precedingandcurrentrow)|23900
至此所有的部分都已经讲完了,在复杂的用法就是把他们结合起来使用。相信大家能很好的使用窗口函数。
postgresql windows function 第三篇
前面两篇已经很好的介绍了窗口函数,这篇我们来关注一下function name这个部分。postgresql有一些内置的函数,专门用于窗口函数。如下
row_number() 点击(此处)折叠或打开 ;
fromempsalary orderbysalary|row_number 正确的写法是 点击(此处)折叠或打开 #select depname(order by salary)from empsalary|row_number
rank() 点击(此处)折叠或打开 )from empsalary|rank
dense_rank() 点击(此处)折叠或打开 )from empsalary|dense_rank
percent_rank() 和 cume_dist() 这两个函数不知道有什么用,不过计算的公式就在上面,看看就知道怎么算了。 ntile() 点击(此处)折叠或打开 (3)from empsalary|ntile
lag( value any [, offsetinteger default ]]) 点击(此处)折叠或打开 1)
first_value() 点击(此处)折叠或打开 )from empsa
last_value() 刚好和first_value()相反,取最后一列。 点击(此处)折叠或打开 )from empsal
点击(此处)折叠或打开 (order by sala 而nth_value()我想你自己从字面上就能理解了吧。这里就不讲解了。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |