今天用到这个函数,相当方便,参考链接如下:
http://blog.youkuaiyun.com/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个第二名时,下一个依然是第三名;