rank() over, dense_rank() over, row_number() over都是用于分组排序的,下面来看看它们的用法以及区别
1.rank() over 语法:
select rank() over(partition by 分组字段 order by 排序字段) as 别名
from 表名
示例:
select *,rank() over(partition by course_id order by grade desc) as 排名
from dbo.stud_grade
使用这个函数,相同列值并列显示,如两个为1的排序,然后接下来就是排序为3,其中排名2跳过。
2.dense_rank() over 语法:
select dense_rank() over(partition by 分组字段 order by 排序字段) as 别名 from 表名
示例:
select *,dense_rank() over(partition by course_id order by grade desc) as 排名
from dbo.stud_grade
相同列的值并列显示,如排序为1的两个,但是和rank() over不同的是,它不用跳过排名2,而是直接显示排序2的。
3.row_number() over
select row_number() over(partition by 分组字段 order by 排序字段) as 别名 from 表名
示例:
select *, row_number() over(partition by course_id order by grade desc) as 排名
from dbo.stud_grade
row_number() over 它不会考虑并列问题,即使查询的列值相同,也不会并列,而是直接排序下去。
如有错误欢迎留言指正
end
有兴趣的小伙伴可以关注“SQL数据库笔记”公众号,一起学习吧!
最后修改时间:2019-12-16 10:02:46
文章转载自SQL数据库笔记,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




