- 定义:
开窗函数也叫分析函数,有两类:一类是聚合开窗函 数,一类是排序开窗函数。
格式:函数名(列) 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号,则结果是0001号~0005号成绩的求和,如:test01表中
结果:
比如求用户最近7天的支付记录且导入历史数据:
2> 排序开窗函数的使用
ROW_NUMBER、DENSE_RANK、RANK、NTILE属于排序函数。
排序开窗函数可以单独使用ORDER BY 语句,也可以和PARTITION BY同时使用。
PARTITION BY用于将结果集进行分组,开窗函数应用于每一组。
ORDER BY 指定排名开窗函数的顺序。在排名开窗函数中必须使用ORDER BY语句。
rank函数说明:如共有1,2,2,4四个数字排序。
RANK() 排序相同时会重复,总数不会变 ,如: 1,2,2,4
DENSE_RANK() 排序相同时会重复,总数会减少 , 如:
1,2,2,3
ROW_NUMBER() 会根据顺序计算 1,2,3,4
3、窗口函数的大小
1>over():默认的窗口大小就是当前整个结果集 的大小,
开窗函数是对每一条数据都开一条窗口。假如有(1,1,2,2,3,3) , 对这些数据开窗
count(*) over(partition by num),则会开六个窗口,结果为:
1,2
1,2
2,2
2,2
3,2
3,2
2>查询: order by(查询中做全局排序) distribute by(查询做分区) sort by(查询做排序) cluster by (查询分区排序)
3>窗口函数: partition by(窗口函数中做分区) order by(窗口函数中做排序)
到此这篇窗口函数 聚合函数(窗口函数用法)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/haskellbc/65041.html