Oracle中OVER子句的含义是什么?
Answers:
OVER子句指定分析功能在其上运行的分区,排序和窗口。
例如,这将计算移动平均值:
AVG(amt) OVER (ORDER BY date ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING)
date amt avg_amt
===== ==== =======
1-Jan 10.0 10.5
2-Jan 11.0 17.0
3-Jan 30.0 17.0
4-Jan 10.0 18.0
5-Jan 14.0 12.0
它在行上方的移动窗口(宽3行)上操作,按日期排序。
这将计算运行余额:
SUM(amt) OVER (ORDER BY date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
date amt sum_amt
===== ==== =======
1-Jan 10.0 10.0
2-Jan 11.0 21.0
3-Jan 30.0 51.0
4-Jan 10.0 61.0
5-Jan 14.0 75.0
它在包含当前行和所有先前行的窗口上运行。
分别计算每个“部门”的最大值:
MAX(amt) OVER (PARTITION BY dept)
dept amt max_amt
==== ==== =======
ACCT 5.0 7.0
ACCT 7.0 7.0
ACCT 6.0 7.0
MRKT 10.0 11.0
MRKT 11.0 11.0
SLES 2.0 2.0
它在包含特定部门所有行的窗口上运行。
您可以使用它来将一些聚合函数转换为解析函数:
SELECT MAX(date)
FROM mytable
将返回1
单个最大值的行,
SELECT MAX(date) OVER (ORDER BY id)
FROM mytable
将返回具有运行最大值的所有行。
它是Oracle分析功能的一部分。