PostgreSQL 的窗口函数

示例1:

         select depname, empno, salary, avg(salary) over (partition by depname) from empsalary;

         第四列表示对与当前行具有相同depname值的所有表行取得平均值。
         一个窗口函数调用总是包含一个直接跟在窗口函数名及其参数之后的OVER子句。这使得它从句法上和一个普通函数或非窗口函数区分开来。OVER子句决定究竟查询中的哪些行被分离出
来由窗口函数处理。OVER子句中的PARTITION BY子句指定了将具有相同PARTITION BY表达式
值的行分到组或者分区。对于每一行,窗口函数都会在当前行同一分区的行上进行计算。

示例2:

          select depname, empno, salary,rank() over (partition by depname order by salary desc) from empsalary;

          rank函数在当前行的分区内按照ORDER BY子句的顺序为每一个可区分的ORDER BY值产生了一个数字等级。rank不需要显式的参数,因为它的行为完全决定于OVER子句。
         一个窗口函数所考虑的行属于那些通过查询的FROM子句产生并通过WHERE、GROUP BY、HAVING过滤的“虚拟表”。
 

窗口函数只允许出现在查询的select列表和order by子句中,不允许出现在其他地方。

窗口帧:对于每一行,在它的分区中的行集被称为它的窗口帧。

       一些窗口函数只作用在窗口帧中的行上,而不是整个分区。默认情况下,如果使用ORDER BY,则帧包括从分区开始到当前行的所有行,以及后续任何与当前行在ORDER BY子句上相等的行。如果ORDER BY被忽略,则默认帧包含整个分区中所有的行。

select salary, sum(salary) over () from empsalary;      窗口帧就是整个分区

 

select salary, sum(salary) over (order by salary) from empsalary;
        这里的合计是从第一个(最低的)薪水一直到当前行,包括任何与当前行相同的行(注意相
同薪水行的结果)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

请叫我曾阿牛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值