在甲骨文中OVER子句是什么意思?

推荐答案

OVER子句指定了分析函数操作的分区、排序和窗口.

Example #1: calculate a moving average

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行宽)在行上运行,按日期排序.

Example #2: calculate a running balance

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

它在包含当前行和所有先前行的窗口上运行.

注:对于使用OVER子句指定排序ORDER的聚合,默认窗口为UNBOUNDED PRECEDINGCURRENT ROW,因此上述表达式可以简化为,结果相同:

SUM(amt) OVER (ORDER BY date)

Example #3: calculate the maximum within each group

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 Fiddle:http://sqlfiddle.com/#!4/9eecb7d/122

Sql相关问答推荐

如何实现一个广泛的多级自连接PostgreSQL查询?

SUM(条件)在Oracle?

JSON列之间的Postgr聚合

如何在SQL Server中列出从当前月份开始的过go 10年中的月份

分组多输出访问查询问题

UPDATE查询中的乐观锁

了解放置时的连接

从数据库中查找总和大于或等于查询中的数字的数字

如何用客户名称计算sum(dr)和sum(cr)

使用generate_series()时,LEFT联接缺少日期/间隔

具有多个条件的SQL否定

从结果SQL查询中排除空值

如何简化此PostgreSQL查询以计算平均值?

更正用于判断错误组合的SQL

用另一个表中的特定名称替换 SQL 查询中的 ID.但我的两个表都有多个列

如何使用 Google BigQuery 中的条件根据特定列值连接列的 N 行?

比使用NOT EXISTS更高效的SQL删除方法是什么?

强制 SQL 始终通过 R 从视图中返回至少一行

为什么 Oracle 在一个查询中对同一张表同时执行 TABLE SCAN 和 INDEX UNIQUE SCAN?

使用一组值进行分组和计数