您可在 SELECT 语句中包括“联机分析处理”(OLAP)表达式来在查询或子查询的结果集中的行的子集上操作。对于数据中的模式、趋势和例外,您可使用 OLAP window 表达式来检测满足条件的行的子集。
OLAP window 表达式允许应用开发人员更简单地和高效地构成分析业务查询。例如,可在各种不同的间隔之上计算移动平均值和移动总和。可随着选择了的列值更改,重置聚集和等级。可以简单的术语表示复杂的比率。
OLAP window 表达式需要 OLAP window 函数和 OVER 子句。
例如,下列查询包含 OLAP 聚集函数 SUM:
SELECT c,d, SUM(d) OVER( PARTITION BY a,b ORDER BY c,d ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) FROM table1;
PARTITION BY 子句为每一组列 a 和 b 的值创建 window 分区。
ORDER BY 子句按照列 c 和 d 的值对每一 window 分区内的数据排序。
以 ROWS 关键字开启的 window 框架子句创建由三行组成的 window 框架:当前行、当前行的前一行,以及当前行的后一行。当前行是 window 框架的引用点。下列表格展示当每一行轮流成为当前行时,window 框架如何在结果集中移动。
行编号 | 第一个框架 | 第二个框架 | 第三个框架 | 第四个框架 | 第五个框架 | 第六个框架 |
---|---|---|---|---|---|---|
1 | 当前的行 | 当前的行 - 1 | ||||
2 | 当前的行 + 1 | 当前的行 | 当前的行 - 1 | |||
3 | 当前的行 + 1 | 当前的行 | 当前的行 - 1 | |||
4 | 当前的行 + 1 | 当前的行 | 当前的行 - 1 | |||
5 | 当前的行 + 1 | 当前的行 | 当前的行 - 1 | |||
6 | 当前的行 + 1 | 当前的行 |
SUM 函数为在该查询的作用域中的每一 window 分区加上三行的 d 列的值。
下列图示展示该查询如何对数据分区、排序和聚集。
该查询返回单个的 window 分区的 c 和 d 列的值以及列 d 的三个值的总和:
c d (sum) 1 1 3 1 2 6 1 3 7 2 2 9 2 4 7 3 1 5
sum 列中的第一个值是 d 列中第一个和第二个值的总和 (1 + 2 = 3)。对于第一个值,不存在当前行的前一个值。
sum 列中的第二个值是 d 列中第一个、第二个和第三个值的总和 (1 + 2 + 3 = 6)。
sum 列中的第三个值是 d 列中第二个、第三个和第四个值的总和 (2 + 3 + 2 = 7)。
sum 列中的最后一个值是 d 列中第五个和第六个值的总和 (1 + 4 = 5)。对于最后的值,不存在当前行的下一个值。