我的java天地

          oracle中各分析函數詳解

          今天心血來潮對oracle中的分析函數進行備份
          1.row_number

          SQL> select ename,sal,deptno,row_number() over(partition by deptno order by sal) c from scott.emp;

          ENAME??????????? SAL DEPTNO????????? C
          ---------- --------- ------ ----------
          MILLER?????? 1300.00???? 10????????? 1
          CLARK??????? 2450.00???? 10????????? 2
          KING???????? 5000.00???? 10????????? 3
          SMITH???????? 800.00???? 20????????? 1
          ADAMS??????? 1100.00???? 20????????? 2
          JONES??????? 2975.00???? 20????????? 3
          SCOTT??????? 3000.00???? 20????????? 4
          FORD???????? 3000.00???? 20????????? 5
          JAMES???????? 950.00???? 30????????? 1
          MARTIN?????? 1250.00???? 30????????? 2
          WARD???????? 1250.00???? 30????????? 3
          TURNER?????? 1500.00???? 30????????? 4
          ALLEN??????? 1600.00???? 30????????? 5
          BLAKE??????? 2850.00???? 30????????? 6

          以部門id分組,以sal進行排序。每組的序值是不間斷,而且是順序增長

          2.rank

          SQL> select ename,sal,deptno,rank() over(partition by deptno order by sal) c from scott.emp;

          ENAME??????????? SAL DEPTNO????????? C
          ---------- --------- ------ ----------
          MILLER?????? 1300.00???? 10????????? 1
          CLARK??????? 2450.00???? 10????????? 2
          KING???????? 5000.00???? 10????????? 3
          SMITH???????? 800.00???? 20????????? 1
          ADAMS??????? 1100.00???? 20????????? 2
          JONES??????? 2975.00???? 20????????? 3
          SCOTT??????? 3000.00???? 20????????? 4
          FORD???????? 3000.00???? 20????????? 4
          JAMES???????? 950.00???? 30????????? 1
          MARTIN?????? 1250.00???? 30????????? 2
          WARD???????? 1250.00???? 30????????? 2
          TURNER?????? 1500.00???? 30????????? 4
          ALLEN??????? 1600.00???? 30????????? 5
          BLAKE??????? 2850.00???? 30????????? 6

          14 rows selected

          分析出的結果是跳躍的,如有2個2則下一個是4

          3.Dense_rank()

          SQL> select ename,sal,deptno,Dense_rank() over(partition by deptno order by sal) c from scott.emp;

          ENAME??????????? SAL DEPTNO????????? C
          ---------- --------- ------ ----------
          MILLER?????? 1300.00???? 10????????? 1
          CLARK??????? 2450.00???? 10????????? 2
          KING???????? 5000.00???? 10????????? 3
          SMITH???????? 800.00???? 20????????? 1
          ADAMS??????? 1100.00???? 20????????? 2
          JONES??????? 2975.00???? 20????????? 3
          SCOTT??????? 3000.00???? 20????????? 4
          FORD???????? 3000.00???? 20????????? 4
          JAMES???????? 950.00???? 30????????? 1
          MARTIN?????? 1250.00???? 30????????? 2
          WARD???????? 1250.00???? 30????????? 2
          TURNER?????? 1500.00???? 30????????? 3
          ALLEN??????? 1600.00???? 30????????? 4
          BLAKE??????? 2850.00???? 30????????? 5

          14 rows selected

          分析出的結時有重復的,與上面的區別是。重復后面的分析結果還是順序增長

          4.刪掉數據庫中重復的記錄

          delete from b a where a.rowid <>(select max(b.rowid) from b b where a.a=b.a) ;

          思想為rowid是不可能重復的,不等于max一個的話,就有一個等于數據被刪掉

          posted on 2009-04-13 21:01 tobyxiong 閱讀(231) 評論(0)  編輯  收藏 所屬分類: DATABASES

          <2009年4月>
          2930311234
          567891011
          12131415161718
          19202122232425
          262728293012
          3456789

          導航

          統計

          常用鏈接

          留言簿(3)

          隨筆分類(144)

          隨筆檔案(157)

          相冊

          最新隨筆

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 宜丰县| 开原市| 句容市| 虞城县| 大同市| 四川省| 瑞昌市| 南乐县| 马山县| 麟游县| 丘北县| 息烽县| 荣昌县| 巴青县| 柏乡县| 隆德县| 哈密市| 湄潭县| 乐陵市| 奈曼旗| 临潭县| 河南省| 东乡| 米易县| 五寨县| 香格里拉县| 邳州市| 定日县| 玉山县| 纳雍县| 土默特左旗| 西和县| 扎兰屯市| 马山县| 雅江县| 沙雅县| 探索| 酉阳| 女性| 灵武市| 和田县|