• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

MySQL数据库基础篇窗口函数示例解析教程

mysql 搞代码 4年前 (2022-01-09) 16次浏览 已收录 0个评论
文章目录[隐藏]

本文简介

前段时间,黄同学写了一篇《MySQL窗口实战》文章(文章如下),但是里面大多数是以实战练习为主,没有做详细的解释。

于是,私信了月牙美女,看看她能否写一篇《窗口函数基础篇》,正好和之前那篇文章配套。这不,很快她就写好了,今天就给大家做一个分享,旨在和大家交流学习哦!

下面是月牙的玩笑简介,附带大图一张哦。

正文介绍

窗口函数,也被称为 “开窗函数”,MySQL8.0以后,就可以使用这些函数了。

我们在力扣刷题的时候,不难发现,比较困难的题目经常会涉及到窗口函数的应用,可以说窗口函数,是检验我们的SQL水平是否到达熟练水平的一个标尺。

窗口函数的格式为: 聚合函数+over()

窗口是描述over()括号内划定的内容,这个内容就是窗口函数的作用域,即操作的数据都在over()的范围内。

对于窗口函数,我个人的理解是给源数据开一扇可以滑动的窗口,在窗口移动的时候可以对其中的数据进行附加计算,如移动平均、分组排序等,窗口可以是一行多行甚至是所有行。

窗口函数,还可以对多组数据进行同步排序、聚合等运算,针对group by子句或where处理后的结果进行操作,只能写入select子句里。

灵魂画手上线,用Excel简单做了个简易版的窗口函数的演示图:

聚合函数 + over()

基本语法:

sum/avg(被加工的字段名) over(partition by 分组的字段名 order by 排序的字段名 rows between … and …)

含义: 表示用partition by分组后针对每个组别进行求和或者求均值。

--包括本行以内和前3行:rows between 6 preceding and current row
--包括本行以内和后3行:rows between current row and 3 following
--包括本行和之前所有的行:rows between unbounded preceding and current row
--包括本行和之后所有的行:rows between current row and unbounded following
--从前3行到下1行(总共包含5行数据):ro<i style="color:transparent">本文来源gaodai$ma#com搞$代*码*网(</i>ws between 3 preceding and 1 following

还有一些其它的聚合函数,例如max、min、count,它们的语法结构都类似。

排序函数 + over()

row_number()、rank()、dense_rank()这三个函数,都是对select查询到的结果进行排序,我们来看看这三者的区别。

row_number(): 为不重复的连续排序,从1开始,为查询到的数据依次生成不重复的序号进行排序

基本语法――row_number() over(order by 需要排序的字段asc/desc);

rank(): 为跳跃排序,结果相同的两个数据并列,为下一个数据空出所占的名次,即相同排名会占位


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:MySQL数据库基础篇窗口函数示例解析教程

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址