**
Oracle高级函数
**
聚合函数
准备数据
我们在日常的oracle开发过程中常用到的聚合函数主要包括:
count:计数函数,主要用来获取记录的数量。
sum:求和函数,主要的用途是对某一字段进行汇总求和。
avg:平均数函数,他用来求平均值。
max:求最大值,获取最大值的函数。
min:求最小值的函数。
以上列举的是我们常用的函数,还有一些不常用的就不做赘述,比如求方差,求标准偏差。这些函数基本都会和group by 一起使用,把给出的记录汇总成一条记录,但是在我们的开发过程中我们有时候的需求是把数据汇总并作为一个字段添加到每一条记录上,一种方法是用普通函数做完汇总,然后和明细进行关联把汇总数据添加到每一条记录,还有就是我们有时候并不是需要把所有的记录进行汇总,而是以某一条记录作为基准,按照一定的规则去统计,比如排序完后对每一条记录的前1条到后一条进行统计,针对以上的场景我们的普通函数就不能满足我们的需求了,这时候高级的分析函数恰好能应用到我们的实际场景中,以sum作为例子来演示
sum(统计字段) over() 全部记录之和
sum(统计字段) over(partition by 分组字段) 分组后组内的全部记录之和
sum(统计字段) over(partition by 分组字段 order by 排序字段) 分组排序后 对前面所有行包括当前行在内的记录进行统计
sum(统计字段) over(partition by 分组字段 order by 排序字段 rows between m PRECEDING and n FOLLOWING ) 分组排序后 对当前行的前m行,后n行,包括本行进行记录统计,如果是统计到最后就把n用unbounded 代替
通过上面的实力可以很清晰的看出,分析函数使用更加灵活多变,能满足和适应更多的场景。
常用的分析函数
lag(1,2,3)over(partition by order by )
参数1代表 列
参数2代表该列的当前行向上找几行
参数3默认值,如果没有默认为空
lead(1,2,3)over(partition by order by )
参数1代表 列
参数2代表该列的当前行向下找几行
参数3默认值,如果没有默认为空
rank () over()
排序1,2,2,4
dense_rank()over()
排序1,2,2,3
row_number()over()
排序1,2,3,4
重点:
sql语句order by 和over(order by )先后顺序
如果sql语句有order by,开窗函数中也有order by ,先是计算开窗函数,最后才计算sql中的排序.,sql中的order by 不会影响开窗函数结果,
如果sql语句有order by,开窗函数中没有order by ,那么先是计算sql中的order by,然后在算开窗函数,也就是会影响开窗函数