排序函数 || 对所有员工的薪水按照salary降序进行1-N的排名

对所有员工的薪水按照salary降序进行1-N的排名

http://www.nowcoder.com/practice/b9068bfe5df74276bd015b9729eec4bf

1 题解Code

select 
emp_no,
salary,
DENSE_RANK()over(order by [salary] desc) as t_rank
from salaries
order by t_rank asc,emp_no asc;

2 排序函数总结 row number/rank/dens_rank

2.1 row_number()

row number 为查询出来的每一行记录生成一个序号(先排序,再给序号),依次排序且序号不会重复

函数形式

select ROW_NUMBER() OVER(order by [column name] desc) as row_num,* from [Table name]
  • over(order by [column name] desc) 中要基于某一column进行排序,在此基础上生成序号

Use Case

按照salary降序排序,row_num 为其对应的序号(排序序号不重复

select ROW_NUMBER() OVER(order by [salary] desc) as row_num,* from salary

2.2 rank()

rank函数就是对查询出来的记录进行排名,与row_number函数不同的是,rank函数考虑到了over子句中排序字段值相同的情况,如果使用rank函数来生成序号,over子句中排序字段值相同的序号是一样的。

函数形式

select rank() OVER(order by [column name] desc) as row_num,* from [Table name]

Use Case

按照salary降序排序,row_num 为其对应的序号,相同的值对应的排序序号相同,如有n个值相同,其对应排序为m,则下一个不相等的值对应的序号为m+n。如工资降序排序 7000为第二高工资,有两个人,则下一个6900对应的序号为4(前4个人的序号为1、2、2、4)

select rank() OVER(order by [salary] desc) as row_num,* from salary

2.3 dense_rank()

与rank函数相同的是dens_rank在排序时相同值对应的序号相同,不同点是dens_rank给出的序号是连续的,如上情况,dens_rank对应的序号结果为1、2、2、3

函数形式

select dense_rank() OVER(order by [column name] desc) as row_num,* from [Table name]
全部评论

相关推荐

04-15 23:42
中山大学 Java
ResourceUtilization:过几天楼主就会捧着一堆offer来问牛友们该怎么选辣
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务