本文给大家介绍一个特殊的函数——开窗函数。
开窗函数是对数据库数据进行实时分析处理,别称OLAP函数(分析函数)。开窗函数是MySQL在8.0版本以后新加的功能,所以大家想要使用开窗函数,首先要把自己的MySQL版本升级到8.0以上。
文章插图
开窗函数其实就是一种在符合某种条件的数据集合上操作的特殊函数。开窗函数分为两种:
- 第一种静态窗口时对每一条记录都执行了函数以后,窗口大小固定不变。
- 第二种不同记录有可能对应不同窗口,这种动态变化的窗口叫做滑动窗口。
文章插图
开窗函数是在当前行(属于某一个窗口),这个窗口是由over关键字指定的,如果over后面的括号里面什么都不加,那么就是说窗口满足where条件的所有行,over之前的开窗函数对所有行都进行计算;如果不为空,就按照以下三个参数进行设置:
- partition by子句:按照指定字段进行分区,两个分区由边界分隔,开窗函数在不同的分区内分别执行,在跨越分区边界时重新初始化。
- order by子句:按照指定字段进行排序,开窗函数将按照排序后的记录顺序进行编号。可以和 partition by子句配合使用,也可以单独使用。
- frame子句:当前分区的一个子集,用来定义子集的规则,通常用来作为滑动窗口使用。
- 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()记录排序:
文章插图
文章插图
- 聚合函数作为开窗函数:
推荐阅读
- 奥瑞金:预制菜系列产品研发及其包装业务已推出首批产品
- 红米K40系列什么时候推送更新MIUI13稳定版
- RedmiK50系列即将发布-RedmiK50系列处理器曝光
- 现实世界|打造系列感的运营设计,设计师要怎么做?
- 主播|温岭:村民变身主播, “云系列”活动助推共同富裕
- 数据|非法获取计算机信息系统数据罪-浅析计算机数据库系统在信息管理
- 信息数据库|安恒信息数据库审计中标中国移动集采项目
- 小米11i系列最新曝光-小米11i系列即将发布
- 小米12配置参数详情-小米12参数及价格
- 家庭空间|华为WATCH 3系列升级支持家庭空间:位置共享、家人紧急联络上线