OracleのOVER句の意味は何ですか?
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
現在の行とそれ以前のすべての行を含むウィンドウ上で動作します。
これにより、「dept」ごとに個別に最大値が計算されます。
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分析関数 の一部です。