Oracle の OVER 句の意味は何ですか?
156461 次
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
現在の行とそれ以前のすべての行を含むウィンドウで動作します。
注: OVER
sort を指定する句を含む集約ORDER
の場合、デフォルトのウィンドウはUNBOUNDED PRECEDING
toCURRENT 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 に答える