2021/2/14 [SQL]对所有员工的当前薪水按照salary进行按照1-N的排名

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

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

解题思路

两种方法:

  1. MySQL 在 8.0 版本以下,使用通常方法解题。
SELECT s1.emp_no, s1.salary, (
    SELECT COUNT(s2.salary) + 1
    FROM salaries s2
    WHERE s2.salary > s1.salary
) AS t_rank
FROM salaries s1
ORDER BY s1.salary DESC, s1.emp_no;
  • 然后我们再在上面的基础上,考虑不跳数字的方式,其实很简单,在 s2 表中的 salary 字段加一个 DISTINCT,完成。
  1. MySQL 在 8.0 版本以上,使用开窗函数。

代码实现

方法1:

SELECT s1.emp_no, s1.salary, (
    SELECT COUNT(DISTINCT s2.salary) + 1
    FROM salaries s2
    WHERE s2.salary > s1.salary
) AS t_rank
FROM salaries s1
ORDER BY s1.salary DESC, s1.emp_no;

方法2(开窗函数):

SELECT emp_no, salary,
DENSE_RANK() OVER(ORDER BY salary DESC) AS t_rank
FROM salaries
ORDER BY t_rank, emp_no;
全部评论

相关推荐

数学转码崽:一直给我推,投了又不理,理了又秒挂
点赞 评论 收藏
分享
评论
14
1
分享

创作者周榜

更多
牛客网
牛客企业服务