您可在 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)。对于最后的值,不存在当前行的下一个值。