ORACLE数据库中 row_number() over(partition by col1 order by col2) 用法

来源:互联网 发布:淘宝上有什么好东西 编辑:程序博客网 时间:2024/06/01 10:36
今天用到这个函数,相当方便,参考链接如下:
http://blog.csdn.net/xiuhaijuanqiang/article/details/7248407
说明:
基本功能为:按照partition by中的col1参数分组,然后组内按照order by 的参数col2排序,mm即为组内对应的序号1、2、3、4......


实例介绍:
    假设现在有不同班级的所有人的分数,然后希望得到每个班的第一名,就可以这样做:
    select * from(    
        select 姓名,班级,分数,rank() over(partition by 班级 order by 分数) as mm)
            where mm=1;
    其中
        select 姓名,班级,分数,rank() over(partition by 班级 order by 分数) as mm 
        得到的结果为:
            各个班级排序,然后班级内分数从高到低的排序
        那么每个班排第一的肯定为mm=1的
实际在数据库测试一下就可以得到用法,很方便,很简单。

注意区分:
row_number():对已相同的结果,只返回一个;例如:最高分相同的时候,只会返回一个结果集;
rank():对相同的结果会跳跃排序,有2个第二名时,直接跳到第四名,不会出现第三名;
dense_rank():对相同的结果连续排序,有2个第二名时,下一个依然是第三名;
原创粉丝点击