Oracle中的OVER子句

Oracle中OVER子句的含义是什么?

OVER子句指定分析函数操作的分区,sorting和窗口。

例如,这个计算一个移动平均数:

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行宽),按datesorting。

这将计算一个运行平衡:

 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 

它在包含特定部门所有行的窗口上运行。

SQL小提琴: http ://sqlfiddle.com/#!4/9eecb7d/ 122

您可以使用它将一些聚合函数转换为分析:

 SELECT MAX(date) FROM mytable 

将返回1行与一个最大值,

 SELECT MAX(date) OVER (ORDER BY id) FROM mytable 

将返回最大运行的所有行。

这是Oracle分析function的一部分。