ウィンドウ関数の上に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から。