1. ホーム
  2. sql

オラクルのOVER句

2023-07-26 11:43:54

質問

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

どのように解決するのですか?

この 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 節があり、ソート ORDER を指定すると、デフォルトのウィンドウは UNBOUNDED PRECEDING から CURRENT 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