暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL窗口函数常用参数整理,需要进阶的小伙伴收藏+多练习,你不赶超别人都没有道理

85



数据库管理和应用

MySQL窗口函数

常用参数整理

之前有整理过一次MySQL的常用函数【MySQL常用函数整理汇总,赶快收藏】,有小伙伴就提到说没有把窗口函数给放进来。今天专门来介绍一下窗口函数。



什么是窗口函数?


窗口函数,也称为开窗函数,是 SQL 中一种强大的数据分析工具,它可以在不改变原表结构的情况下,对数据进行分组、排序和聚合等操作,并为每一行数据计算出一个基于特定窗口的数据结果。


以下是关于窗口函数的详细介绍:





01

基本概念


窗口


可以理解为一个数据的子集,它是根据特定的条件和范围定义的。在这个子集中,窗口函数会对每一行数据进行计算和处理。窗口的大小和范围可以根据具体的需求进行定义,可以是固定的行数或列数,也可以是根据某个条件动态确定的。


函数类型


o聚合函数:如 SUM、AVG、COUNT、MAX、MIN 等。在窗口范围内进行聚合计算,例如计算每个部门的员工平均工资,窗口就是每个部门内的员工记录。

o排序函数:如 RANK、DENSE_RANK、ROW_NUMBER 等。用于对窗口内的数据进行排序,并为每行分配一个排名或序号。

o分析函数:如 LAG、LEAD、FIRST_VALUE、LAST_VALUE 等。用于在窗口内进行数据的比较和分析,例如 LAG 函数可以获取当前行的前一行数据,LEAD 函数可以获取当前行的下一行数据。


• 语法结构


窗口函数的基本语法结构如下:

function_name(expression) OVER (

 [PARTITION BY partition_expression]

 [ORDER BY order_expression [ASC|DESC]]

 [ROWS | RANGE frame_clause]

)


OVER():指定分析函数工作的数据窗口大小,这个数据窗口大小可能会随着行的变化而变化。


•function_name:是窗口函数的名称,如前面提到的聚合函数、排序函数或分析函数等。

•expression:是函数的参数,可以是列名、表达式或常量等。

•PARTITION BY:子句用于将数据按照指定的列或表达式进行分组,每个分组就是一个独立的窗口。

•ORDER BY:子句用于对窗口内的数据进行排序,决定了函数计算的顺序。

•ROWS | RANGE:子句用于定义窗口的范围,ROWS 是基于物理行来定义窗口范围,RANGE 是基于逻辑范围来定义窗口范围。


OVER ()函数内部会用到一些参数,参数的说明如下:

CURRENT ROW: 当前行

n PRECEDING:往前n行数据

n FOLLOWING:往后n行数据

UNBOUNDED:起点,UNBOUNDED PRECEDING,表示从前面的起点,UNBOUNDED FOLLOWING表示到后面的终点

LAG(col,n):往前第n行数据

LEAD(col,n):往后第n行数据

NTILE(n):把有序分区中的行分发到指定数据的组中,各个组有编号,编号从1开始,对于每一行,NTILE返回此行所属的组的编号。其中,n必须为int类型。



02

举例说明



单看这介绍会有些不容易理解,下面拿一个例子来对比理解一下。


有一组数据表business,字段分别为姓名name,订单日期orderdate,金额cost,我们现在通过不同的窗口来将cost按照日期进行累加,SQL语句如下:



Select name,orderdate,cost,

Sum(cost) over() as sample1,——所有行相加

Sum(cost) over(partition by name) as sample2,——按name分组,组内数据相加

Sum(cost) over(partition by name order by orderdate) as sample3,——按name分组,组内数据逐行累加

Sum(cost) over(partition by name order by orderdate rows between UNBOUNDED PRECEDING and current row) as sample4,——和sample3一样,由起点到当前行的聚合

Sum(cost) over(partition by name order by orderdate rows between 1 PRECEDING and current row) as sample5,——当前行和前面一行做聚合

Sum(cost) over(partition by name order by orderdate rows between 1 PRECEDING and 1 FOLLOWING) as sample6,——当前行和前面一行及后面一行聚合

Sum(cost) over(partition by name order by orderdate rows between current row and UNBOUNDED FOLLOWING) as sample7 ——当前行及后面所有行做聚合

from business;


sql语句放在这里,小伙伴们自己动手尝试,看看是什么结果。



03 

应用场景



数据排名与排序

在考试成绩统计中,使用窗口函数可以方便地对每个班级的学生成绩进行排名,了解每个学生在班级中的成绩位置。


分组统计与分析

在销售数据统计中,按地区对销售额进行分组,使用窗口函数可以计算每个地区的累计销售额、平均销售额等,方便分析不同地区的销售情况。




数据对比与趋势分

在股票交易数据中,使用窗口函数可以比较当前股价与过去一段时间内的股价,分析股价的变化趋势,例如计算移动平均线等。



窗口函数为 SQL 数据处理提供了更灵活、更强大的功能,能够帮助用户更高效地进行数据分析和处理,在数据仓库、报表生成、数据分析等领域都有广泛的应用。



数据分析相关内容,入门内容可点击【数据分析入门】进行查看,进阶内容可点击【数据分析进阶】,后续将会对数据分析中涉及到的内容做系列介绍,如对内容感兴趣,可关注公众号及时接收更新内容。


 FOLLOW US 

关注我们

问题咨询请扫码

文中部分图片源自网络,如有侵权,请联系删除

文章转载自数据分析记事本,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论