Oracle 窗口函数
简单来说,窗口函数是分析函数的一种,通常可以理解成over()函数
构成:函数名①() over(partition by 分组的列名 order by 排序的列名 XXX)
XXX是指特殊使用的,比如rows,range等等
例如:
SUM(a.amount) over(order by a.visited_on desc rows 1 preceding)
SUM(a.amount) over(order by a.visited_on desc range 1 preceding)
SUM(a.amount) over(order by a.visited_on ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING)
(在力扣上看到的大佬写的)
其中:rows和range分别表示选择后几行、选择数据范围
rows between 中的一些参数代表意思
preceding:往前
following:往后
current row:当前行
unbounded:无边界,
unbounded precending 表示从最前面的起点开始,
unbounded following:表示到最后面的终点
函数名①一般来说有几种
一种是聚合函数,像是sum、avg、count这种
一种是排序函数(序列函数),像是rank、dense_rank、row_number这种
一种是不好归类的,像是row_number这种行数范围的
常用的函数使用
sum() 求和
max() 最大值
min() 最小值
avg() 平均值
count() 统计数
row_number() 按照大小进行排名,相同大小名次不一样,就是按照行号走下去
rank() 按照大小进行排名,纯粹的排名,相同大小名次一样,会有名次的跳跃,即除了相同的,其余排名顺序与行号相同,第一名有十个,那第十一个就是第十一名
dense_rank() 按照大小进行排名,相同大小名次一样,但是不会进行名次的跳跃,即第一名玩了就是第二名,就算第一名有十个,那第十一个也是第二名
lag() 向上进行偏移对数据进行查询
lead() 向下进行偏移对数据进行查询
聚合函数用的比较少
序列函数可参考:https://www.cnblogs.com/jokingremarks/p/16286637.html
lag和lead可参考:https://www.cnblogs.com/jokingremarks/p/16622458.html