【mysql学习笔记】窗口函数汇总

本文介绍了MySQL从8.0版本开始支持的窗口函数,它使得复杂的分组查询变得更加简便。窗口函数将查询结果按特定规则分区,并在每个分区内部进行函数运算,为每行提供计算结果。与GROUP BY不同,窗口函数对每个分组的行进行单独操作。主要函数包括:rank、dense_rank、row_number以及聚合函数如sum、avg等。窗口函数需置于SELECT子句中,对WHERE或GROUP BY处理后的结果进行操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

mysql从8.0开始支持窗口函数,使用窗口函数,会令我们的分组查询变得便捷。

窗口函数,简单来说就是对于一个查询SQL,将其结果集按指定的规则进行分区,每个分区可以看作是一个窗口,分区内的每一行,根据其所属分区内的行数据进行函数计算,获取计算结果,作为该行的窗口函数结果值。

窗口函数和group by有类似之处,其区别在于窗口会对每个分组之后的数据进行分别操作,而group by一般对分组之后的函数使用聚集函数汇总。

窗口函数的语法:

<窗口函数> over (partition by <用于分组的列名> order by <用于排序的列名>)

<窗口函数> 的位置,可以放以下两种函数:
1) 专用窗口函数,包括后面要讲到的 rank, dense_rank, row_number 等专用窗口函数。
2) 聚合函数,如 sum, avg, count, max, min 等

需要强调的一点是:窗口函数是对 where 或者 group by 子句处理后的结果进行操作,所以窗口函数原则上只能写在 select 子句中。 

以下是mysql的专用窗口函数一览。点击各函数链接查看具体应用。(※持续更新中)

No名称描述
1CUME_DIST()累积分配值
2DENSE_RANK()当前行在其分区中的排名,稠密排序
3FIRST_VALUE()指定区间范围内的第一行的值
4LAG()取排在当前行之前的值
5LAST_VALUE() 指定区间范围内的最后一行的值
6LEAD()取排在当前行之后的值
7NTH_VALUE()指定区间范围内第N行的值
8NTILE()将数据分到N个桶,当前行所在的桶号
9PERCENT_RANK()排名值的百分比
10RANK()当前行在其分区中的排名,稀疏排序
11ROW_NUMBER()分区内当前行的行号

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值