<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-314  評論-209  文章-0  trackbacks-0

    轉:本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/huanghui22/archive/2007/05/03/1595166.aspx


    有些時候我們希望得到指定數據中的前n列,示例如下:

    得到每個部門薪水最高的三個雇員:

    先創建示例表

    create table emp
    as
    select * from scott.emp;

    alter table emp
    add constraint emp_pk
    primary key(empno);

    create table dept
    as
    select * from scott.dept;

    alter table dept
    add constraint dept_pk
    primary key(deptno);

    先看一下row_number() /rank()/dense_rank()三個函數之間的區別

     select emp.deptno,emp.sal,emp.empno,row_number() over (partition by deptno order by sal desc) row_number,  --1,2,3
      rank() over (partition by deptno order by sal desc) rank, --1,1,3
      dense_rank() over (partition by deptno order by sal desc) dense_rank from emp --1,1,2
    結果如下:

    10    5000.00    7839    1    1    1
    10    2450.00    7782    2    2    2
    10    1300.00    7934    3    3    3
    20    3000.00    7788    1    1    1
    20    3000.00    7902    2    1    1
    20    2975.00    7566    3    3    2
    20    1100.00    7876    4    4    3
    20    800.00    7369    5    5    4
    30    2850.00    7698    1    1    1
    30    1600.00    7499    2    2    2
    取每個部門的薪水前三位雇員:

    select t.deptno,t.rank,t.sal from
     (
     select emp.*,row_number() over (partition by deptno order by sal desc) row_number,  --1,2,3
      rank() over (partition by deptno order by sal desc) rank, --1,1,3
      dense_rank() over (partition by deptno order by sal desc) dense_rank from emp --1,1,2
     ) t
    where t.rank<=3
    結果如下:

    10    1    5000.00
    10    2    2450.00
    10    3    1300.00
    20    1    3000.00
    20    1    3000.00
    20    3    2975.00
    30    1    2850.00
    30    2    1600.00
    30    3    1500.00
    如果想輸出成deptno  sal1   sal2   sal3這種類型的格式
    步驟一(decode):

    select t.deptno,decode(row_number,1,sal) sal1,decode(row_number,2,sal) sal2,decode(row_number,3,sal) sal3 from
     (
     select emp.*,row_number() over (partition by deptno order by sal desc) row_number,  --1,2,3
      rank() over (partition by deptno order by sal desc) rank, --1,1,3
      dense_rank() over (partition by deptno order by sal desc) dense_rank from emp --1,1,2
     ) t
    where t.rank<=3

    結果如下:

    10    5000       
    10                  2450   
    10                             1300
    20    3000       
    20                  3000   
    20                              2975
    30    2850       
    30                 1600   
    30                             1500
    步驟二(使用聚合函數去除null,得到最終結果):

    select t.deptno,max(decode(row_number,1,sal)) sal1,max(decode(row_number,2,sal)) sal2,max(decode(row_number,3,sal)) sal3 from
     (
     select emp.*,row_number() over (partition by deptno order by sal desc) row_number,  --1,2,3
      rank() over (partition by deptno order by sal desc) rank, --1,1,3
      dense_rank() over (partition by deptno order by sal desc) dense_rank from emp --1,1,2
     ) t
    where t.rank<=3
    group by t.deptno
    結果如下:

    10    5000    2450    1300
    20    3000    3000    2975
    30    2850    1600    1500

     

    posted on 2009-09-07 16:45 xzc 閱讀(416) 評論(0)  編輯  收藏 所屬分類: Oracle
    主站蜘蛛池模板: 亚洲精品无码久久毛片| 日本媚薬痉挛在线观看免费| 国产亚洲人成A在线V网站| 美女视频黄.免费网址| 免费v片在线观看无遮挡| 黄页网址大全免费观看12网站| 国产99视频精品免费视频7| 朝桐光亚洲专区在线中文字幕 | 亚洲欧美不卡高清在线| 免费被黄网站在观看| 亚洲av日韩精品久久久久久a| 免费看国产一级片| 国产黄在线观看免费观看不卡 | 日本黄网站动漫视频免费| 激情综合亚洲色婷婷五月| 日本人的色道www免费一区| 无码的免费不卡毛片视频| 中文字幕在线亚洲精品| 免费无码又爽又刺激高潮视频| 亚洲伊人久久大香线蕉在观| 日本一区免费电影| 久久久精品国产亚洲成人满18免费网站| 久久久久久久综合日本亚洲| 四虎1515hh永久久免费| 亚洲AV无码AV吞精久久| 亚洲无人区午夜福利码高清完整版 | eeuss影院免费92242部| 亚洲αv久久久噜噜噜噜噜| 日本最新免费网站| 国产亚洲精品仙踪林在线播放| 中文字幕亚洲一区| 成年人免费的视频| 男女猛烈无遮掩视频免费软件| 亚洲大片在线观看| 欧洲精品免费一区二区三区| 黄桃AV无码免费一区二区三区 | 日本免费电影一区二区| 亚洲男人天堂2022| 中文字幕中韩乱码亚洲大片| 国产成人福利免费视频| 国产精品永久免费视频|