8-1 窗口函数
-
什么是窗口函数
窗口函数也称为OLAP函数。OLAP是Online Analytical Proessing的简称,意思是对数据库数据进行实时分析处理。例如。市场分析、创建财务报表、创建计划等日常性商务工作。窗口函数就是为了实现OLAP而添加的标准SQL功能
-
窗口函数的语法
-
能够作为窗口函数使用的函数
窗口函数大体可以分为以下两种:
- 能够作为窗口函数的聚合函数(SUM/AVG/COUNT/MAX/MIN)
- RANK、DENSE_RANK、ROW_NUMBER等专用窗口函数
-
-
语法的基本使用方法——使用RANK函数
RANK是用来计算记录排序的函数
-
窗口函数兼具有GROUP BY子句的分组功能以及ORDER BY子句的排序功能,**但是,PARTITION BY子句并不具备GROUP BY子句的汇总功能。**因此,使用RANK函数并不会减少原表中记录的行数;
-
通过PARTITION BY分组后的记录集合称为窗口,此处的窗口代表“范围”,这也是“窗口函数”名称的由来
-
各个窗口在定义上绝对不会包含共通的部分
-
无需指定PARTITION BY
-
专用窗口函数的种类
由于专用窗口函数无需参数,因此通常括号中都是空的
-
窗口函数的适用范围
原则上,窗口函数只能在SELECT子句中使用
-
作为窗口函数使用的聚合函数
所有的聚合函数都能用作窗口函数,其语法和专用窗口函数完全相同
像这样以“自身记录(当前记录)”作为基准进行统计,就是将聚合函数当作窗口函数使用时的最大特征
-
计算移动平均
窗口函数就是将表以窗口为单位进行分割,并在其中进行排序的函数。其实其中还包含在窗口中指定更加详细的汇总范围的备选功能,该备选功能中的汇总范围称为框架
-
指定框架(汇总范围)
-
将当前记录的前后行作为汇总对象
-
两个ORDER BY
OVER子句中的ORDER BY只是用来决定窗口函数按照什么样的顺序进行计算的。对结果的排列顺序并没有影响
8-2 GROUPING运算符
-
同时得到合计行
-
ROLLUP——同时得出合计和小计
-
ROLLUP的使用方法
-
ROLLUP可以同时得出合计和小计
-
-
GROUPING函数——让NULL更容易分辨
-
CUBE——用数据来搭积木
所谓CUBE,就是将GROUP BY子句中聚合键的“所有可能组合”的汇总结果集合到一个结果中。
-
GROUPING SETS——取得期望的积木
GROUPING SETS这个运算符可以用于从ROLLUP或者CUBE的结果中取出部分记录