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;
语法结构: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/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球