sql >> データベース >  >> RDS >> Oracle

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



    1. 外部キー制約で使用される列を変更できません

    2. Oracleで英数字以外の文字のみを含む行を返す2つの方法

    3. SELECTはPL/pgSQL関数で例外を発生させます

    4. オートコンプリートフィールド用の同様のUTF-8文字列