78

Oracle の OVER 句の意味は何ですか?

4

4 に答える 4

88

このOVER句は、分析関数が「処理する」パーティション化、順序付け、およびウィンドウを指定します。

例 #1: 移動平均を計算する

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 行幅) で動作します。

例 #2: 実行中の残高を計算する

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

現在の行とそれ以前のすべての行を含むウィンドウで動作します。

注: OVERsort を指定する句を含む集約ORDERの場合、デフォルトのウィンドウはUNBOUNDED PRECEDINGtoCURRENT ROWであるため、上記の式は次のように簡略化され、同じ結果になります。

SUM(amt) OVER (ORDER BY date)

例 #3: 各グループ内の最大値を計算する

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

于 2009-07-07T15:54:17.597 に答える
32

これを使用して、いくつかの集計関数を分析に変換できます。

SELECT  MAX(date)
FROM    mytable

1最大値が 1 つの行を返します。

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

実行中の最大値を持つすべての行を返します。

于 2009-07-07T12:50:16.767 に答える
20

これは、 Oracle 分析関数の一部です。

于 2009-07-07T12:48:15.567 に答える