用dense_rank()窗口函数解决,同时注意易错点
获取当前薪水第二多的员工的emp_no以及其对应的薪水salary
https://www.nowcoder.com/practice/8d2c290cc4e24403b98ca82ce45d04db
select emp_no, salary from ( select emp_no, salary, dense_rank() over ( order by salary desc ) 排名 from salaries ) t where 排名 = 2 order by emp_no
本来一直报错,后来想到,窗口函数不小心写错了,写成:dense_rank() over (partition by emp_no order by salary desc),这是错误的,正确的是:dense_rank() over (order by salary desc),区别在于错误的多了partition by emp_no,这样会导致按照emp_no分组,由于emp_no算是每个人的id,各不相同,倘若加入分组会导致每个人作为一个组,每个组只有一个人,最后order by排序得到的结果是每个人的排名都是1,这样是没有意义且得不到结果的。对于partition by分组的使用还是要仔细些。