rank()在Oracle中可用于排名,属于分析函数,rank() over ([partition by 分区字段1[,分区字段2...] order by 排序字段 asc|desc)。
分区字段可有多个,用逗号分隔,也可使用函数,如rank over (partition by 部门,trunc(日期,'mm') order by 钱 asc),,这样就分部门按月份对发的钱进行排序。asc是升,desc是降。
rank()的排名是不连续的,如果存在并列名次的话,如并列第一后面就是第三名,要得到连续排名,如并列第一后为第二,就要用dense_rank()代替rank(),其余一样。
null在rank()中会排在最前面,可在最后加nulls last把null值扔到最后,如rank() over ([partition by 分区字段1[,分区字段2...] order by 排序字段 asc|desc nulls last)。
使用中,rank不用单独成一列,在SQL语句中的位置与使用比较灵活,如
select 部门,姓名,decode(部门,'总经理室',case when rank() over (partition by 公司,部门,trunc(发薪日期,'mm') order by 工资 desc)<=3 then '很多' else '呵呵' end,'嘿嘿') 评价 from 工资表 where 公司='xxx’
上面随便写的,不知道有没有语法错误,大体意思是这样,只对某公司的总经理室每月的排名进行处理,其它的不处理(当然排名是有排名,只是在语句里不用处理)。
>> 除非说明均为原创,如转载请注明来源于http://www.stormcn.cn/post/1766.html