Oracle分析関数RANK()、ROW_NUMBER()、LAG()等の使用方法


ROW_NUMBER()OVER(PATION BY COL 1 ORR BY COL 2)は、COL 1パケットによって、パケット内部でCOL 2に従って並べ替えられたこの値は、各グループの内部並べ替え後の順序番号(グループ内で連続する唯一の)RANK()と類似していることを示していますが、RANKで並べ替えた場合は、派順位と同様に、2つの第1位の後は、第3位のLAGとなります。グループ内の次のレコードは前のレコードの差を減らして、第一条はNULL BTWに戻ります。EXPERT ONEで話した一番詳しくて、関連している特徴がたくさんあります。文書は見づらいです。number()とrownumは似ていますが、機能がより強い(各グループ内で1から順に並べられます)rank()はジャンプ順序で、2番目の順位がある時に、次は4位(同じグループ内で)dense_です。rank()lは連続して並べ替えられています。二番目がある時もやはり第三位です。それに比べてrow_numberは、重複値のないlag(arg 1,arg 2,arg 3):arg 1は他の行から返される表現であるarg 2は、検索したい現在の行のパーティションのオフセット量です。正のオフセットです。前の行の数を検索します。arg 3は、arg 2が示す数がパケットの範囲を超えた場合に戻る値です。SQL>set pagesize 100;SQL>select rownum from emp;ROWNUM------1 2 3 4 5 6 7 9 10 12 14行が選択されました。使用済み時間:00:00:00.10 SQL>select deptno,row_number()over(partition by deptno order by sal)from emporder by deptno;DEPTNO ROW_NUMBER()OVER(PARTTIONBYDEPT NOORDERBYSAL)-------------------------------------10 1 2 3 20 1 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 5 5 6行が選択されています。使用済み時間:00:00:4.41 SQL>select deptno,rank()over(partition by deptno order by sal)from emporder by deptno;DEPTNO RANK()OVER(PARTTIONBYDEPT NOORDERBYSAL)---------------------------10 1 2 3 20 1 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3使用済み時間:00:00:00.21 SQL>select deptno,dense_rank()over(partition by deptno order by sal)from emporder by deptno;DEPTNO DENSE_RANK()OVER(PATIONBYDEPT NOORDERBYSAL)---------------------------------10 1 2 3 20 1 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 5は14行を選択しました。使用済み時間:00:00:00.20 SQL>select deptno,ename,sal,lag(ename,1,null)over(partition by deptno ord er by ename)from emp ord by deptno;DEPTNO ENAME SAL LAG(ENAME、----------------10 CLARK 2450 KING 5000 CLARK MILLER 1300 KING 20 ADAMS 1100 FORD 3000 ADAMS JONES 2975 FORD SCOTT 3000 JONES SMITH 800 SCOTT 30 ALLEN 1600 BLAKE 2850 ALLEN JAMES 950 BLAKEMART 1250行を選択しました。使用済み時間:00:00:00.31 SQL>select deptno,ename,sal,lag(ename,2,'example')over(partition by deptのorder by ename)from m em order by deptno;DEPTNO ENAME SAL LAG(ENAME、--------------10 CLARK 2450 example KING 5000 xample MILLER 1300 CLARK 20 ADAMS 1100 example FORD 3000 example JONES 2975 ADAMS SCOTT 3000 FORD SMITH 800 JONES 30 ALLEN 1600 ALLE BLAKEE 285行を選択しました。