mysql 窗口函数_MySQL-窗函数

从8.0版开始,MySQL已支持窗口功能。 窗口功能能够以新的,更轻松的方式并以更好的性能解决查询问题。假设有一个销售表,其中存储了按员工和会计年度划分的销售额:

0c46d496104c21d094f4a6d136daf451.png

0173954e9fc13846f3c60ff0e934137b.png

04d1f0737165627a6aba00384e0aadaf.png
图表信息

聚合函数将多行中的数据汇总到单个结果行中。 例如,SUM()函数返回记录的年份中所有雇员的总销售额:

1fc839b61e6fd77b0c526d9e65d3625b.png

GROUP BY子句允许将聚合函数应用于行的子集。 例如要按会计年度计算总销售额:

664a33c31b9395572583d8af745f912c.png

在两个示例中,聚合函数都减少了查询返回的行数。像带有GROUP BY子句的聚合函数一样,窗口函数也可对行的子集进行操作,但它们不会减少查询返回的行数。例如,以下查询返回每个雇员的销售额以及该雇员按会计年度的总销售额:

e5b2fa81543b4f8c99af1ffc06f8b50a.png

这个例子中,SUM()函数用作窗口函数,该窗口函数对由OVER子句的内容定义的一组行进行操作。 SUM()函数应用到的一组行称为窗口。SUM()窗口函数像使用GROUP BY子句的查询那样按年度报告总销售额,而且还报告每一行的结果,而不返回总行数。窗口函数是在所有JOIN,WHERE,GROUP BY和HAVING子句之后以及ORDER BY,LIMIT和SELECT DISTINCT之前的结果集上执行的。在这个例子中,SUM()函数用作在由OVER子句的内容定义的一组行。

基本语句:

63fd4de9d634802bc6879f1ab8dbc9ea.png

解释:

在这个语法中:

首先,指定窗口函数名称,后跟一个表达式。

其次,指定具有三个可能元素的OVER子句:分区定义,顺序定义和框架定义。

没有表达式,OVER子句后的左括号和右括号是一定要写的,例如:

62005be0062ebe071aa41f8656d86c47.png

partition_clause语法:partition_clause将行分成块或分区。两个分区由分区边界分隔。

窗口功能在分区内执行,并在跨越分区边界时重新初始化。

PARTITION BY <expression>[{,<expression>...}]

order_by_clause语法:ORDER BY <expression> [ASC|DESC], [{,<expression>...}]

ORDER BY子句指定分区中行的排序方式。可以在多个键上的分区中对数据进行排序,每个键由一个表达式指定。多个表达式也用逗号分隔。与PARTITION BY子句相似,所有窗口函数也支持ORDER BY子句。但是,仅对顺序敏感的窗口函数使用ORDER BY子句才有意义。

窗函数:

91a5afd9f04fe586d4c326e46d5012ff.png

官网上的资料:

00f171b48306e6e5de6d93eb44d22ae3.png

参考资料:

https://www.mysqltutorial.org/mysql-window-functions/​www.mysqltutorial.org https://www.mysqltutorial.org/mysql-aggregate-functions.aspx​www.mysqltutorial.org MySQL 8.0.2: Introducing Window Functions​mysqlserverteam.com
bdf174d79f233cdf4caeee37907e0555.png
https://medium.com/@marcosanchezayala/how-and-when-to-use-mysql-window-functions-910635f7c83d​medium.com https://tableplus.com/blog/2019/10/mysql-window-functions.html​tableplus.com
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值