今天扫文档,看SQL Reference的时候,找到了分析函数的相关内容,系统的学习了一下,解决了很久以来一直觉得神奇,却无法理解和应用的分析函数。
分析函数是对一组查询结果进行运算,从而获得结果的函数,从这个意义上,分析函数非常类似于聚合函数(Aggregate Function)。而根据文档中的列表发现,二者的函数很多是共同的。唯一区别是当调用分析函数时,后面加上了over()语句。不过也正是这个语句导致了分析函数在行为上与聚合函数的差异。
聚合函数是对一个查询结果中的每个分组进行运算,并且对每个分组产生一个运算结果。分析函数也是对一个查询结果中的每个分组进行运算,但每个分组对应的结果可以有多个。产生这个不同的原因是分析函数中有一个窗口的概念,一个窗口对应于一个分组中的若干行,分析函数每次对一个窗口进行运算。运算时窗口在查询结果或分组中从顶到底移动,对每一行数据生成一个窗口。
分析函数的over()部分的分析字句有3部分构成,分区语句,排序语句和窗口语句。
分区语句(partition by)将查询结果分为不同的组,功能类似于group by语句,是分析函数工作的基础。默认是将所有结果作为一个分组。
排序语句(order by)将每个分区进行排序。
窗口语句是定义当前窗口,具体说是对每一个分组,按照给定的排序规则排序后,从分组的顶部到底部依次迭代,每次针对当前的行可以定义一个包含若干行的窗口。如果省略了窗口语句,默认使用从分组第一行到当前行的分组。
:END
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/21402791/viewspace-663386/
,如需转载,请注明出处,否则将追究法律责任。