OVER的定义 OVER用于为行定义一个窗口,它对一组值进行操作,不需要使用GROUP BY子句对数据进行分组,能够在同一行中同时返回基础行的列和聚合列。 语法 OVER ( [ PARTITION BY column ] [ OR
OVER的定义OVER用于为行定义一个窗口,它对一组值进行操作,不需要使用GROUP BY子句对数据进行分组,能够在同一行中同时返回基础行的列和聚合列。 语法
PARTITION BY 子句进行分组; ORDER BY 子句进行排序; ROWS|RANGE 框架是对窗口进行进一步的分区,框架有两种范围限定方式:一种是使用ROWS子句,通过指定当前行之前或之后的固定数目的行来限制分区中的行数;另一种是RANGE子句,按照排序列的当前值,根据相同值来确定分区中的行数。 RANGE表示按照值的范围进行范围的定义,而ROWS表示按照行的范围进行范围的定义;边界规则的可取值见下表 用法OVER开窗函数必须与聚合函数或排序函数一起使用,聚合函数一般指SUM(),MAX(),MIN,COUNT(),AVG()等常见函数。排序函数一般指RANK(),ROW_NUMBER(),DENSE_RANK(),NTILE()等。 示例创建测试表
SUM后的开窗函数
结果如下: 其中开窗函数的每个含义不同,我们来具体解读一下:
只对PARTITION BY后面的列Groupname进行分组,分组后求解Salary的和。
对PARTITION BY后面的列Groupname进行分组,然后按ORDER BY 后的ID进行排序,然后在组内对Salary进行累加处理。
只对ORDER BY 后的ID内容进行排序,对排完序后的Salary进行累加处理。
对Salary进行汇总处理 排序ROW_NUMBER() 定义:ROW_NUMBER()函数作用就是将SELECT查询到的数据进行排序,每一条数据加一个序号
RANK()
NTILE() 定义:NTILE(N)函数是将数据分成N块,然后再添加1~N的序号。
ROWS|RANGE
参考https://www.modb.pro/db/42912 |
2021-06-02
2021-06-05
2022-06-27
2022-10-12
2019-09-11