オラクルのウィンドウ関数 - ターン

ウィンドウ関数の上にOracleおよび分析機能

転送:http://zonghl8006.blog.163.com/blog/static/4528311520083995931317/
:オーバー解析機能
Oracleの機能解析は、特定のグループに基づいて集計値を計算するため、8.1.6からそれを解析機能の提供を開始しました重合は、関数は異なる
各グループが複数の行を返すようにするため、および集約関数は、グループごとに一つだけの行を返します。
ここでは、そのアプリケーションのいくつかの例を説明します。                                      
1:店舗の統計売上高。    

DATE購入したい
     1 20
     2 15
     3 14
     18の4
     5 30
    日間の統計によって:ルールを統計前の数日間の毎日の合計である
    結果が得られた:
DATEセールSUM
    ----- -------- ---- -
    1 20は、20である--1日で          
    21535--1日+ 2日          
    31449--1日+ 2日+ 3日間          
    41867。         
    30 97 5。
    
2:第一年生各クラスの統計情報
    NAME S CLASS                        
    ----- ----- ----------------------
    FDA。1 80                    
    FFD 1 78                    
    1 95 DSS                    
    CFE 2 74           

 GDS 2 92                    
    GF 3 99                    
    DDD 3 99                    
    ADF 3 45                    
    3 55 ASDF                    
    3DD 3 78             
  
    通过:  
    -
    SELECT * FROM                                                                      
    (                                                                           
    t2からミリ秒のDESCによってクラス順序によって(パーティション上の名前、クラス、S、ランク()を選択)
    )                                                                           
    どこミリメートル= 1
    -
    得到结果:
    NAME CLASS S MM                                                                                       
    ----- ----- ---------------------- -------------- --------
    DSS 1つの95 1                     
    GDS 2 92 1                     
    GF 3 99 1                     
    DDD 3 99 1

 注:
    同じクラス最初、ROW_NUMBER()の結果を返すだけのために結ば2がある場合ため1求めて最初の結果は、)(ROW_NUMBERを使用することができない        
    差分2.rank()とDENSE_RANKを()です:
      - -rank()はソートされ、次に第四の時間である二つの第二ジャンプさ
      --dense_rank()lはときに、2つの第二の静止三位に続く、連続一種であります

3.分類統計(及び情報を表示)
    B C                     
    - - ----------------------
    m 2のA                     
    N-A 3                     
    M 2、A                     
    N-2、B                     
    N-B 1。                     
    X. 3 Bの                     
    XのB 2                     
    4 XB                     
    H B. 3
   SELECT A、C、T2から(Aによるパーティション)にわたる和(C)は               
   :結果得られた
   B C SUM(C)上に(PARTITIONBYA)を  

 - - ------- ------------------------
   H B. 3. 3                       
   M 2 4 A                       
   M A 2 4                       
   N-A 6 3。                       
   N-2 6 B。                       
   6. 1のNb                       
   X B. 3. 9                       
   X 2 9 Bの                       
   XのB. 4. 9                       
 
   のみ得られたことにより和、グループもし
   SUM(C)                     

- ----------------------
   H. 3                     
   、M 4                     
   。N- 6                     
   X. 9                     
   列Bの値を得ることができない      
 
=====
テストSELECT * FROM

データ:
ABC
1. 1. 1。
1 2 2
1 3 3
2 2 5
3 4 6。

---ビット値B列の和に対応する同一のフィールドのCの値は、B、C、SUM(C)OVER(B BY PARTITION)を選択C_Sum試験から

ABC C_SUM
1 1 1 1
1 2 2 7
2 2 5 7
1 3 3 3
3 4 6 6

---あなたはすでにフィールドの値を分割して、ヌルを使用しない場合

例:Cは、それぞれの行のサマリーの裏面にフィールドの値であり、

試験から、B、C、SUM(C)OVER(ヌルBY PARTITION)C_Sumを選択

ABC C_SUM

1 1 1 17
1 2 2 17
1 3 3 17
2 2 5 17
3 4 5 6 17

賃金部門の割合として、個々の賃金を求めて

SQL>給与から選択*;

NAME DEPT SAL

---------- ---- -----

10〜2000
B 10 3000
C 10 5000
D 20 4000

SQL>を選択し、名前、DEPT、サル、サル* 100 / SUM(SAL)(DEPTによってパーティション)を超える給与からのパーセント。

NAME DEPT SALパーセント

---------- ---- ----- ----------

10〜2000 20
B 10 3000 30
C 10 5000 50
D 20 4000 100

II:窓関数の          
      窓関数が動作するデータサイズ解析ウィンドウ関数を指定し、以下のように、データウィンドウのサイズは、例えば、ラインの変化に伴って変化することがあります
。1:    
   (給与順)上給与ソート蓄積よれば、注文デフォルトの窓関数による
   部門パーティションに係るオーバー(DEPTNOによるパーティション)
:2
  (以下、前後5 BETWEEN給与範囲順。)にわたって
   5以下での行振幅値の前に各行のデータウィンドウに対応し、線振幅値5以下でない
   たとえば、次のために

AA
     1
     2
     2
     2
     3
     4
     5
     6
     7
     9

 和(AA)(順上 2前回と2次との間のAA範囲)
   結果は
            AAのSUM

 ---------------------- ---------------------------- ---------------------------
            1 10                                                     
            2 14                                                     
            2 14                                                     
            2 14                                                     
            3 18                                                     
            4 18                                                     
            5 22                                                     
            6 18                                                               
            7 22                                                               
            9 9   

すなわち、5-1 <= AA <= 5 + 2、の線A-A = 5、合計のため、であり、AA = 2のためのものである、和= 1 + 2 + 2 + 2 + 3 + 4 = 14;とIF AA = 9、9-1のための<= AA <= 9 + 2 9ほんの数、= 9和ので、3:他の:(2前後4次間給与行順)上各行データウィンドウに対応しています行2の前、後4行4:次の3つのステートメントは等価である:同等の、最後の行の最初の窓からのデータの各行に対応する(前の無限と無限次間給与行順)上:順(上前述の無限と無限に続く)上等価の間の給与の範囲(ヌルによってパーティション)

 

一般的な解析機能は次のとおりです。

オーバーROW_NUMBER()(...によってによって...オーダーパーティション)を超える(で... ...続きを順番パーティション)を超える(で... ...続きを順番パーティション)のランク()DENSE_RANK()、カウント( )...によってによって...オーダーパーティション(オーバーによって... ...によって順序パーティション(オーバー...によってによって...オーダー(パーティション)MAX())分())の和()オーバーオーバー(によって...順パーティション)上(による...順パーティション)上(による...順パーティション)平均()FIRST_VALUE()LAST_VALUE()(パーティション上...によってオーダー...による)(ラグ))による... ...によって順序パーティション(オーバーリード())による... ...によって順序パーティション(オーバー

示例SQL>を選択種類、数量テストから。

TYPEのQTY

---------- ----------

1 6
2 9

SQL>を選択種類、数量、TO_CHAR(ROW_NUMBER())数量によって型の順序によって、パーティション(オーバー)|| '/' || TO_CHAR(COUNT(*)を超える種類別(パーティション))の試験からCNT2として;

TYPE QTY CNT2

---------- ---------- ------------
3 1/2
1 2/2 6
2 5 1/3
7 2/3
2~9 3/3

 SQL>テストから選択*;

---------- ---------------------------------------- ---------
1 11111
2 22222
3 33333
4 44444

SQL>を選択しt.id、MC、TO_CHAR(b.rn)|| '/' || t.id)テストトンからE 2は、(テストから半ば(MAX(TO_NUMBER(ID)を選択)からROWNUMのRNを選択します) ROWNUMによって接続IDによって<= MID))L 4 b.rn <= TO_NUMBER(t.id)順序

ID MC TO_CHAR(B.RN)|| '/' || T.ID

--------- ----------------------------------------- --------- ----------------------------------------- ----------
1 11111 1/1
2 1/2 22222
2 22222 2/2
3 1/3 33333
3 33333 2/3
3 3/3 33333
44444 44444 1/4 2/4
4 44444 3 / 4CNOUG4 44444 4/4

10行の選択

************************************************** *****************

によってパーティションについて

これらは、分析的な機能です(のみ8.0 ROW_NUMBERの後のようです)と類似した、より強力なポイント(1から開いて、各グループ内でソートすることができます)ランク()ソートをジャンプさROWNUM、二つの第二位です次いで、DENSE_RANK()L(また内の様々なグループに)第が依然として第三位二つの第二場所に続いて連続ソート、ある存在します。遅れない重複値ROW_NUMBER比較(ARG1、ARG2、ARG3):ARG1は、他の行から返された現在の行のパーティションARG2発現を検索するオフセットされています。行の前の数が取り出されたときに、正は戻って、オフセットされます。数値範囲表さARG2パケット外にある場合ARG3値が返されます。

1. DEPTNOによってEMP順から(SALによってDEPTNO順序によってパーティション)上DEPTNO、ROW_NUMBER()を選択します。

2. [DEPTNO、DEPTNOによってEMP順から(SALによってDEPTNO順序によってパーティション)上のランク()。

3. DEPTNOによってEMP順から(SALによってDEPTNO順序によってパーティション)上DEPTNO、DENSE_RANK()を選択します。

4. DEPTNO、ENAME、SAL、DEPTNOによってEMPのORDのERから(ENAMEによってDEPTNO順序によってパーティション)にわたる遅れ(ENAME、1、NULL)を選択します。

5. DEPTNOによってEM Pが順から(ENAMEによってDEPTNO順序によってパーティション)上DEPTNO、ENAME、SAL、ラグ(ENAME、2 '例')を選択します。

6. EMPから(DEPTNOによってパーティション)上DEPTNO、SAL、SUM(SAL)を選択し; - 各ラインはDEPTNOによりEMP群から合計値を選択DEPTNO、SUM(SAL)を有した後に記録されました。

7.平均賃金と各部門の賃金格差と一人一人の部署

、DEPTNO、ENAME、SALを選択  

     dept_avg_salとしてラウンド(DEPTNOによってAVG(SAL)を超える(パーティション))、

     dept_sal_diffとしてラウンド(SAL-AVG(SAL)上DEPTNOによって(パーティション))

EMPから。

おすすめ

転載: www.cnblogs.com/Mr-Simple001/p/10953767.html