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;
语法结构: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不要忘记了
Original: https://blog.csdn.net/weixin_60948956/article/details/128739884
Author: 奔波霸的伶俐虫
Title: MySQL窗口函教-开窗聚合函数(SUM()、AVG()、MAX()、MIN()、COUNT())
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/812823/
转载文章受原作者版权保护。转载请注明原作者出处!