Oracle中的OVER子句是什么意思?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (22)

Over子句在Oracle中的含义是什么?

提问于
用户回答回答于

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

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

扫码关注云+社区