开窗函数的使用
- 定义:
开窗函数也叫分析函数,有两类:一类是聚合开窗函 数,一类是排序开窗函数。
格式:函数名(列) OVER(partition by 列名 order by列名)
(1)OVER 关键字:
OVER 关键字表示把函数当成开窗函数而不是聚合函数。SQL 标准允许将所有聚合函数用做开窗函数,使用 OVER 关键字来区分这两种用法。
开窗函数 COUNT(*) OVER()对于查询结果的每一行都返回所有符合条件的行的条数。OVER 关键字后的括号中还经常添加选项用以改变进行聚合运算的窗口范围。如果 OVER 关键字后的括号中的选项为空,则开窗函数会对结果集中的所有行进行聚合运算。
聚合函数每组只返回一个值,开窗函数每组可返回多个值。
(2)PARTITION BY 子句:
开窗函数的 OVER 关键字后括号中的可以使用 PARTITION BY 子句来定义行的分区来供进行聚合计算。与 GROUP BY 子句不同,PARTITION BY 子句创建的分区是独
立于结果集的,创建的分区只是供进行聚合计算的,而且不同的开窗函数所创建的分区也不互相影响。
2、开窗函数分类
1>聚合开窗函数使用:一般和 聚合函数使用,组成开窗函数,
常用聚合函数:
count()求个数
sum() 求和
avg()求平均数
min()最小值
max()最大值
需要注意的是:
(1)这些函数常与group by子句连用。除了 COUNT 以外,聚合函数忽略空值。
(2)聚合开窗函数只能使用PARTITION BY子句或都不带任何语句,聚合开窗函数不能和order by 一起使用。
over() 的另一常用情景是与 row_number() 一起用于分页。
(3) 窗口函数OVER()指定一组行,开窗函数计算从窗口函数输出的结果集中各行的值。
(4)开窗函数不需要使用GROUP BY就可以对数据进行分组,还可以同时返回基础行的列和聚合列。
注意:
聚合函数sum在窗口函数中,是对自身记录、及位于自身记录以上的数据进行求和的结果。比如0004号,在使用sum窗口函数后的结果,是对0001,0002,0003,0004号的成绩求和,若是0005号,则结果是0