为了账号安全,请及时绑定邮箱和手机立即绑定

【九月打卡】第20天 MySQL8.0 窗口函数

标签:
MySQL

第一板块:玩转MySQL8.0新特性,5-1;5-2;5-3,董旭阳

第二,三板块:

  1. 什么叫窗口函数?

窗口的概念非常重要,它可以理解为记录集合,窗口函数也就是在满足某种条件的记录集合上执行的特殊函数。对于每条记录都要在此窗口内执行函数,有的函数随着记录不同,窗口大小都是固定的,这种属于静态窗口;有的函数则相反,不同的记录对应着不同的窗口,这种动态变化的窗口叫滑动窗口。
窗口函数和普通聚合函数也很容易混淆,二者区别如下:
聚合函数是将多条记录聚合为一条;而窗口函数是每条记录都会执行,有几条记录执行完还是几条。
聚合函数也可以用于窗口函数中,这个后面会举例说明。

窗口函数举例:

下面例子中,row_number()over(partition by user_no order by amount desc)这部分都属于窗口函数,它的功能是显示每个用户按照订单金额从大到小排序的序号。
按照功能划分,可以把MySQL支持的窗口函数分为如下几类:
序号函数:row_number() / rank() / dense_rank()
分布函数:percent_rank() / cume_dist()
前后函数:lag() / lead()
头尾函数:first_val() / last_val()
其他函数:nth_value() / nfile()

https://img1.sycdn.imooc.com/632e9eee00012bef09281020.jpg

    2.序号函数

序号函数——row_number() / rank() / dense_rank()。
 
用途:显示分区中的当前行号
使用场景:希望查询每个用户订单金额最高的前三个订单

https://img1.sycdn.imooc.com/632e9fa300011b4e08340477.jpg

    3.分布函数

分布函数——percent_rank()/cume_dist()。
 
percent_rank()
 
用途:和之前的RANK()函数相关,每行按照如下公式进行计算:
(rank - 1) / (rows - 1)
其中,rank为RANK()函数产生的序号,rows为当前窗口的记录总行数。
应用场景:没想出来……感觉不太常用,看个例子吧↓

https://img2.sycdn.imooc.com/632e9ff0000170ac06710630.jpg

第四板块:

https://img3.sycdn.imooc.com/632e9f050001078418950848.jpg

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
Web前端工程师
手记
粉丝
0
获赞与收藏
0

关注作者,订阅最新文章

阅读免费教程

  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消