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

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

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

    隨筆-314  評(píng)論-209  文章-0  trackbacks-0

    引用

    trailblizerOracle:Rank,Dense_Rank,Row_Number比較

    Oracle:Rank,Dense_Rank,Row_Number比較

    一個(gè)員工信息表

    Create Table EmployeeInfo (CODE Number(3) Not Null,EmployeeName varchar2(15),DepartmentID Number(3),Salary NUMBER(7,2),

    Constraint PK_EmployeeInfo Primary Key (CODE));

    Select * From EMPLOYEEINFO

    Oracle:Rank,Dense_Rank,Row_Number比較 - trailblizer - trailblizer的博客

    現(xiàn)執(zhí)行SQL語句:

    Select EMPLOYEENAME,SALARY,

    RANK() OVER (Order By SALARY Desc)  "RANK",

    DENSE_RANK() OVER (Order By SALARY Desc ) "DENSE_RANK",

    ROW_NUMBER() OVER(Order By SALARY Desc) "ROW_NUMBER"

     From EMPLOYEEINFO

    結(jié)果如下:

    Oracle:Rank,Dense_Rank,Row_Number比較 - trailblizer - trailblizer的博客

    Rank,Dense_rank,Row_number函數(shù)為每條記錄產(chǎn)生一個(gè)從1開始至N的自然數(shù),N的值可能小于等于記錄的總數(shù)。這3個(gè)函數(shù)的唯一區(qū)別在于當(dāng)碰到相同數(shù)據(jù)時(shí)的排名策略。

    ①ROW_NUMBER:

    Row_number函數(shù)返回一個(gè)唯一的值,當(dāng)碰到相同數(shù)據(jù)時(shí),排名按照記錄集中記錄的順序依次遞增。

    ②DENSE_RANK:

    Dense_rank函數(shù)返回一個(gè)唯一的值,除非當(dāng)碰到相同數(shù)據(jù)時(shí),此時(shí)所有相同數(shù)據(jù)的排名都是一樣的。

    ③RANK:

    Rank函數(shù)返回一個(gè)唯一的值,除非遇到相同的數(shù)據(jù)時(shí),此時(shí)所有相同數(shù)據(jù)的排名是一樣的,同時(shí)會(huì)在最后一條相同記錄和下一條不同記錄的排名之間空出排名。

    同時(shí)也可以分組排序,也就是在Over從句內(nèi)加入Partition by groupField:

     Select DEPARTMENTID,EMPLOYEENAME,SALARY,

    RANK() OVER ( Partition By DEPARTMENTID Order By SALARY Desc)  "RANK",

    DENSE_RANK() OVER ( Partition By DEPARTMENTID Order By SALARY Desc ) "DENSE_RANK",

    ROW_NUMBER() OVER( Partition By DEPARTMENTID Order By SALARY Desc) "ROW_NUMBER"

     From EMPLOYEEINFO

    結(jié)果如下:

    Oracle:Rank,Dense_Rank,Row_Number比較 - trailblizer - trailblizer的博客

    現(xiàn)在如果插入一條工資為空的記錄,那么執(zhí)行上述語句,結(jié)果如下:

    Oracle:Rank,Dense_Rank,Row_Number比較 - trailblizer - trailblizer的博客

    會(huì)發(fā)現(xiàn)空值的竟然排在了第一位,這顯然不是想要的結(jié)果。解決的辦法是在Over從句Order By后加上 NULLS Last即:

    Select EMPLOYEENAME,SALARY,

    RANK() OVER (Order By SALARY Desc  Nulls Last)  "RANK",

    DENSE_RANK() OVER (Order By SALARY Desc Nulls Last) "DENSE_RANK",

    ROW_NUMBER() OVER(Order By SALARY Desc Nulls Last ) "ROW_NUMBER"

     From EMPLOYEEINFO

    結(jié)果如下:

    Oracle:Rank,Dense_Rank,Row_Number比較 - trailblizer - trailblizer的博客

    posted on 2011-04-03 21:46 xzc 閱讀(649) 評(píng)論(0)  編輯  收藏 所屬分類: Oracle
    主站蜘蛛池模板: 亚洲精品日韩一区二区小说| 亚洲精品国产自在久久| 亚洲成AV人片在| 91福利免费网站在线观看| 亚洲人成7777| 97碰公开在线观看免费视频| 成人黄18免费视频| 亚洲色欲色欲www在线播放| 日韩精品在线免费观看| 99精品国产免费久久久久久下载| 亚洲日本在线播放| 岛国片在线免费观看| 精品国产亚洲一区二区三区| ASS亚洲熟妇毛茸茸PICS| 毛片基地免费视频a| 婷婷久久久亚洲欧洲日产国码AV| 午夜亚洲国产理论片二级港台二级 | 成人五级毛片免费播放| 亚洲AV综合永久无码精品天堂| 国产免费拔擦拔擦8x| 成人一级免费视频| 亚洲AV无码乱码国产麻豆穿越| 337P日本欧洲亚洲大胆艺术图| 国产一级一片免费播放| 中文字幕免费在线看| 久久青青草原亚洲av无码app | 在线观看国产情趣免费视频| 黄色免费在线网址| 蜜臀91精品国产免费观看 | 红杏亚洲影院一区二区三区| 久久免费视频观看| 亚洲人成人无码网www电影首页| 热99RE久久精品这里都是精品免费 | 亚洲第一黄片大全| 久9热免费精品视频在线观看| 亚洲日韩中文字幕日韩在线| 一级毛片免费观看不卡的| 亚洲妇女无套内射精| 亚洲精品亚洲人成人网| 毛片免费在线播放| a级毛片在线视频免费观看|