MySQL窗口函教-开窗聚合函数(SUM()、AVG()、MAX()、MIN()、COUNT())

MySQL窗口函教-开窗聚合函数(SUM()、AVG()、MAX()、MIN()、COUNT())

和传统的聚合函数区别?

最大的区别在于,一个操作列,一个是依次操作行,最终显示出每一行,最后的效果就是呈现叠加的效果

-- 开窗聚合函数
SELECT
    dname,
    ename,
    salary,
    sum( salary ) over ( PARTITION BY dname ORDER BY hiredate ) AS c1 
FROM
    employee

根据上面的结果,可以明显的看出,sum()操作是对每一行进行迭代,迭代之前的总数

1、如果没有order by 操作就会对所有的数据进行聚合操作

也可以控制行数,开头和结尾

rows between unbounded(开头) preceding and current(当前行) row

2、从当前行向上取出三个值,相加然后和当前行相加,就得到了当前行的最终值,如果是没有的话,那么就取到有的值。

SELECT
    dname,
    ename,
    salary,
    sum( salary ) over ( PARTITION BY dname ORDER BY hiredate rows between 3 preceding  and current row) AS c1 
FROM
    employee

3、 这里就是取出前面三行和后面一行,再去和本身相加,最终得到最终值

select  
 dname,
 ename,
 salary,
 sum(salary) over(partition by dname order by hiredate  rows between 3 preceding and 1 following) as c1 
from employee;

4、 从当前行加到最后

SELECT
    dname,
    ename,
    salary,
    sum( salary ) over ( PARTITION BY dname ORDER BY hiredate rows BETWEEN current ROW AND unbounded following ) AS c1 
FROM
    employee;

可以将sum换成avg或者max等聚合函数,最终的原理都是一样的

语法结构:rows between unbounded(开头) preceding  and current(当前行) row

紧跟到order by 后面。
按照这样的形式我们可以最终获取

rows是不需要变动的参数,between 也是不需要变动的参数

unbounded preceding :开头

number preceding :加上具体的数字就是往上取到多少值

注意:如果是数值的话,或者开头一定要跟上preceding这个参数

current row:表示当前行,如果出现这个那么也就是范围指定到后面了

其次不变的就是and

如果and后面跟上具体的数字,那么就是代表着向后取多少行

unbounded following:取到最后一行

number following:向后取到具体的行

注意:如果是数值和unbounded就需要注意加following

current row:表示当前行,如果出现这个那么也就是范围指定到后面了,注意row不要忘记了
  • 9
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值