mysql 窗口函数

说明:

序号 Name Description
1 CUME_DIST() 累积分布值
2 DENSE_RANK() 当前行在其分区内的秩,没有间隙
3 FIRST_VALUE() 来自窗框第一行的参数值
4 LAG() 来自分区内当前行的参数值
5 LAST_VALUE() 窗框最后一行的参数值
6 LEAD() 分区内当前行前导行的参数值
7 NTH_VALUE() 窗框第N行参数值
8 NTILE() 当前行在其分区内的Bucket编号。
9 PERCENT_RANK() 百分比秩值
10 RANK() 当前行在其分区内的秩,带间隙
11 ROW_NUMBER() 其分区中当前行的数量

概述

1、CUME_DIST()

CUME_DIST()是一个窗口函数,它返回一组值中值的累积分布。它表示值小于或等于行的值除以总行数的行数。CUME_DIST()函数的返回值大于零且小于或等于1(0 CUME_DIST()<< = 1)。重复的列值接收相同的CUME_DIST()值。

CUME_DIST() OVER (  PARTITION BY expr, ...  ORDER BY expr [ASC | DESC], ... )  

2、DENSE_RANK()

DENSE_RANK()是一个窗口函数,它为分区或结果集中的每一行分配排名,而排名值没有间隙。行的等级从行前的不同等级值的数量增加1。

DENSE_RANK() OVER (     PARTITION BY <expression>[{,<expression>...}]     ORDER BY <expression> [ASC|DESC], [{,<expression>...}] )  

3、FIRST_VALUE()

FIRST_VALUE()是一个窗口函数,允许您选择窗口框架,分区或结果集的第一行。

FIRST_VALUE(expression) OVER (         [partition_clause]         [order_clause]         [frame_clause] )  

4、LAG()

LAG()函数是一个窗口函数,允许您回顾多行并从当前行访问行的数据。

LAG(<expression>[,offset[, default_value]]) OVER (     PARTITION BY expr,...     ORDER BY expr [ASC|DESC],... )  

5、LAST_VALUE()

LAST_VALUE()函数是一个窗口函数,允许您选择有序行集中的最后一行。

LAST_VALUE (expression) OVER (     [partition_clause]     [order_clause]     [frame_clause] )  

6、LEAD()

函数是一个窗口函数,允许您向前看多行并从当前行访问行的数据。与LAG()函数类似,LEAD()函数对于计算同一结果集中当前行和后续行之间的差异非常有用。

LEAD(<expression>[,offset[, default_value]]) OVER (     PARTITION BY (expr)     ORDER BY (expr) )  

7、NTH_VALUE()

这NTH_VALUE()是一个窗口函数,允许您从有序行集中的第N行获取值。

 NTH_VALUE(expression, N) FROM FIRST OVER (     partition_clause     order_clause     frame_clause )  

8、NTILE()

MySQL NTILE()函数将排序分区中的行划分为特定数量的组。从每个组分配一个从一开始的桶号。对于每一行,NTILE()函数返回一个桶号,表示行所属的组。

NTILE(n) OVER (     PARTITION BY <expression>[{,<expression>...}]     ORDER BY <expression> [ASC|DESC], [{,<expression>...}] )  

9、PERCENT_RANK()

这PERCENT_RANK()是一个窗口函数,用于计算分区或结果集中行的百分位数。

PERCENT_RANK()     OVER (         PARTITION BY expr,...         ORDER BY expr [ASC|DESC],...     ) 

10、RANK()

RANK()函数为结果集的分区中的每一行分配一个排名。行的等级由一加上前面的等级数指定。

RANK() OVER (     PARTITION BY <expression>[{,<expression>...}]     ORDER BY <expression> [ASC|DESC], [{,<expression>...}] )  

11、ROW_NUMBER()

这ROW_NUMBER()是一个窗口函数或分析函数,它为从1开始应用的每一行分配一个序号。(适用于排序和分组排序)

ROW_NUMBER() OVER (   	PARTITION BY <expression>[{,<expression>...}]	     ORDER BY <expression> [ASC|DESC], [{,<expression>...}] )