MySQL窗口函数-解决复杂报表统计需求的强大函数


前言

今天碰到一个需求对mysql数据做比较复杂的聚合查询,牛马小陈思索了半个小时用尽了GROUP BY 和 join也没能完美解决,于是想起了尘封在脑海里的【窗口函数】的概念,于是面向百度编程三分钟解决问题。

具体问题就不再展示了,本篇文章主要是记录一下mysql【窗口函数】的用法。


一、mysql窗口函数是什么?

窗口函数又名开窗函数,属于分析函数的一种。是一种在查询结果中进行聚合计算、排序和分组的高级技术。窗口函数可以在查询的结果集上进行窗口操作,提供了对数据的更灵活的处理和分析能力。
窗口函数可以在查询结果上进行聚合计算,而不会改变结果集的行数。窗口函数用于计算基于组(GROUP BY)的某种聚合值,它们与普通的聚合函数(如 SUM、AVG、COUNT)不同,普通的聚合函数通常会将结果简化为单个值,并且查询结果只有一行,而窗口函数可以在每一行上进行计算,保留原始查询结果的每一行。

使用窗口函数的基本语法如下:

窗口函数() OVER (PARTITION BY1,2, ... ORDER BY 排序列1, 排序列2, ...) [别名]

常用的窗口函数包括:

排名函数:ROW_NUMBER()、RANK() 和 DENSE_RANK()用于对数据进行排序并分配排名。
ROW_NUMBER():会为每一行分配一个唯一的数字排名。
RANK():会为相同数值的行分配相同的排名,但会跳过下一个排名。
DENSE_RANK():会为相同数值的行分配相同的排名,但不会跳过下一个排名。

错行函数:lead()、lag()函数用于获取当前行的前一行或后一行的值。
lead():返回当前行之后的某一行的值。
lag():返回当前行之前的某一行的值。
这些函数可以用于计算时间序列数据中的差异或趋势。

取值函数:First_value()、last_value()函数用于获取分组中的第一个值和最后一个值。
First_value():返回分组中的第一个值。
last_value():返回分组中的最后一个值。
这些函数通常用于计算移动平均或累计总和等聚合操作。

分箱函数:NTILE()函数将数据按照指定的桶数进行分箱。
例如,如果将数据分为4个桶,NTILE()函数会将数据分为四分之一,并将每个值分配到相应的桶中。这些函数可以用于创建数据的等宽分布。

请注意,窗口函数在 MySQL 8.0 版本中引入,如果您的 MySQL 版本较低,可能无法使用窗口函数。

二、深度剖析over开窗函数

本来想自己梳理一下发出来,不过看到一个大佬整理出来的文档非常清晰和完整了,于是我就不再多此一举了,用到的时候点个传送门直接飞过去。。。

MySQL中的窗口函数全方位详解、深度剖析over开窗函数

给大佬倒咖啡,辛苦了。

  • 25
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值