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

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()分区内当前行的行号


版权声明:本文为m0_63073742原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。