mysql 窗口函数

2023年2月19日11:25:31

说明:

序号 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>...}]
) 

  • 作者:姚鑫国
  • 原文链接:https://blog.csdn.net/weixin_44325655/article/details/118055664
    更新时间:2023年2月19日11:25:31 ,共 1992 字。