分析函数

OLAP函数,意思是数据实时分析处理,因此也成为分析函数。
最基本的分析函数的语法是:
<窗口函数> over ([partition by <列名>] order  by 列名)
其中partiton by 是指以那一列分组,order by 是指分好组后,以那一列排序。
常用的窗口函数有rank,dense_rank,row_number这三种,也可以将窗口函数的位置改成分组函数。
Rank
 分析函数
函数通过job列对表进行分组后,以sal进行排序,rank函数相当于给结果标序号。如果不用partition  by 子句就可以清楚的了解rank函数用法。
 分析函数
从这张图里可以看到,两个sal在相等的情况下,他会对两列给一个相同的序号,直到下一个不同的数据出现,但是排序不是接着 上边的序号进行,而是根据数据所在的位置排序。就像图中排序4的有两个,但是下一个不同的数据直接排序为6。如果不想出现这种情况,可以用dense_rank函数。
 分析函数
这个函数的用法和rank一样,但是他得到的结果是按顺序依次向下排的,就像图中排序4的优两个,下个不是想rank函数排序为6,而是排序5依次向下。
Row_number函数就是对整张表进行排序,不论排序列的值是否相同
 分析函数
这种函数在某种情况下可以简单的写成:
 分析函数
但是rownum在使用上有一些特殊情况,所以建议使用分析函数。
分析函数只能用在select子句中,这是一种规则,是数据库的语法限制。
除了这三种窗口函数外,我们还可以在分析函数中使用聚合函数
 分析函数
不仅能够在分析函数中使用聚合函数,而且功能也十分强大,当我们用ename列排序,并对sal求和时,他会对每一行和前面所有行进行求和运算,就是说sum分析函数的作用是对每一行进行与已出现行的求和。
 分析函数
同样的,avg函数就是求平均。
 分析函数
Max是求最大值
 分析函数
Min是求最小值
如果我想要我这一行与前两行或者后两行的求和或求平均,可以分析函数中指定行数
 分析函数
在函数中加入rows 2 preceding就可以求出这一行和前两行的总和
 分析函数
在函数中指定为2 preceding and 2 following的时候,他就会对以这一行为中心的5行,也就是之前2行,之后2行进行求和运算,但是这里需要注意的是following不能单独使用。
如果想单独使用following关键字可以这样使用
 分析函数
就是用当前行和后两行就行求和运算。