九道门 | 数据库进阶系列之开窗函数 原标题:九道门 | 数据库进阶系列之开窗函数 本文给大家介绍一个特殊的函数——开窗函数。 开窗函数是对数据库数据进行实时分析处理,别称OLAP函数(分析函数)。开窗函数是MySQL在8.0版本以后新加的功能,所以大家想要使用开窗函数,首先要把自己的MySQL版本升级到8.0以上。 开窗函数其实就是一种在符合某种条件的数据集合上操作的特殊函数。开窗函数分为两种: 第一种静态窗口时对每一条记录都执行了函数以后,窗口大小固定不变。 第二种不同记录有可能对应不同窗口,这种动态变化的窗口叫做滑动窗口。 开窗函数跟聚合函数很类似,区别就是对数据的每一行都会返回计算结果,不会减少。具体的语法如下:
开窗函数是在当前行(属于某一个窗口),这个窗口是由over关键字指定的,如果over后面的括号里面什么都不加,那么就是说窗口满足where条件的所有行,over之前的开窗函数对所有行都进行计算;如果不为空,就按照以下三个参数进行设置: partition by子句:按照指定字段进行分区,两个分区由边界分隔,开窗函数在不同的分区内分别执行,在跨越分区边界时重新初始化。 order by子句:按照指定字段进行排序,开窗函数将按照排序后的记录顺序进行编号。可以和 partition by子句配合使用,也可以单独使用。 frame子句:当前分区的一个子集,用来定义子集的规则,通常用来作为滑动窗口使用。 通常用between frame_start 和 frame_end语法来表示行的范围,frame_start和frame_end可支持: current row 边界是当前行,一般和其他范围关键字一起使用 unbounded preceding 边界是分区中的第一行 unbounded following 边界是分区中的最后一行 expr preceding 边界是当前行减去expr的值 expr following 边界是当前行加上expr的值 那么具体的窗口函数是什么呢? 1、rank()函数显示区间重复间断的序号; 2、dense_rank()显示区间重复不间断的序号; 3、row_number()显示区间不重复不间断的序号。 示例: 首先查看自己的MySQL版本,确保是8.0以上的有开窗函数的功能。
可以发现”Server version: 8.0.26 MySQL Community Server – GPL“说明MySQL的版本是高于8.0的,那么就可以愉快的使用开窗函数啦。 rank()记录排序:
dense_rank()记录排序:
row_number()记录排序:
聚合函数作为开窗函数: 可以将(sum,avg,count,max,min)等聚合函数引用至开窗函数中:
滑动窗口的使用:
大家有没有发现开窗函数使用起来特别方便啊,生命不息,奋斗不止,我们每天努力,好好学习,不断提高自己的能力,相信自己一定会学有所获。加油!!!
返回搜狐,查看更多 责任编辑:
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/36135.html