SQL 17) -dense_rank() 获取当前薪水第二多的员工的emp_no以及其对应的薪水salary

获取当前薪水第二多的员工的emp_no以及其对应的薪水salary

http://www.nowcoder.com/questionTerminal/8d2c290cc4e24403b98ca82ce45d04db

方法1)dense_rank()over() 求工资排名第二的记录
SELECT a.emp_no, a.salary    -- 再套一层查询
FROM(
SELECT emp_no, salary, dense_rank()over(ORDER BY salary DESC)rank_num
FROM salaries
WHERE to_date = '9999-01-01')a
WHERE a.rank_num = 2;
  • 注意外面要再套一层查询
方法2)不那么严谨但是能过的ORDER BY + LIMIT + OFFSET
SELECT emp_no, salary
FROM salaries
WHERE to_date = '9999-01-01'
ORDER BY salary DESC
LIMIT 1 OFFSET 1;
  • 这种情况下如果同一工资有多条记录不适用

全部评论
方法2的话,可以对薪水去重再如上操作,再做一个where筛选就可以把。select emp_no,salary from salaries where salary = ( select distinct salary as dis_salary from salaries order by dis_salary desc limit 1,1 ) ;
3 回复 分享
发布于 2021-05-27 19:07
方法一窗口函数为什么要嵌套呢,直接使用不行吗?
点赞 回复 分享
发布于 2021-03-28 13:58
为什么括号后要个表名
点赞 回复 分享
发布于 2021-09-17 22:42
我不明白为什么 都要用到 WHERE to_date = '9999-01-01'? 这条件有什么用吗
点赞 回复 分享
发布于 2022-01-05 13:37
你好,法一为什么一直报错呢? ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(ORDER BY salary DESC)rank_num FROM salaries WHERE to_date = '9999-01-01')a WHER' at line 3
点赞 回复 分享
发布于 2022-03-23 14:07
我仔细想了想还是应该先过滤掉不是当前日期的记录再排序
点赞 回复 分享
发布于 2023-12-25 13:06 广东

相关推荐

11-28 17:48
中山大学 C++
点赞 评论 收藏
分享
评论
16
1
分享
牛客网
牛客企业服务