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

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

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

select emp_no, salary, DENSE_RANK() over(order by salary desc) as t_rank
from salaries
ORDER BY t_rank, emp_no;

这道题最难的地方在于,之前没有学过排名函数。

下面介绍几种排名方法。

-- 分数相同时,排名不同
row_number()
select salary, row_number() over(order by salary) from salaries;

-- 分数相同时,排名相同,但是后续排名不连贯
rank()
select salary, rank() over(order by salary) from salaries;

-- 分数相同时,排名相同,后续排名连贯
dense_rank()
select salary, dense_rank() over(order by salary) from salaries;

-- 分数相同时,排名亦不同
ntile(n)
select salary, ntile(5) over(order by salary) from salaries;

这四种方法各有不同,在多实践掌握吧。

MySQL试题答案解析 文章被收录于专栏

MySQL在线编程重点试题解析

全部评论

相关推荐

在开会的单身狗很有一套:学院本被想着这么快有面试,而且简历废话太多了 那些在校经历什么荣誉什么的企业不关心
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务