题解 | #排序函数的使用#
获取当前薪水第二多的员工的emp_no以及其对应的薪水salary
https://www.nowcoder.com/practice/8d2c290cc4e24403b98ca82ce45d04db
select emp_no,
salary
from (select *,
dense_rank() over(order by salary desc) ranks
from salaries) T
where ranks = 2
order by emp_no
dense_rank()
: 排序相同时会重复,数字不会跳过,即会出现1, 1, 2...
的情况rank()
: 排序相同时会重复,但是数字会跳过,即会出现1, 1, 3...
的情况row_number()
: 排序相同时不会重复,按顺序进行
上述方法均使用over()
限制排序的列以及排序是升序还是倒序(desc)
由于本题需要查找第二大的薪资,并且有可能重复,因此使用 dense_rank()
函数并倒序查找,指定序号为 2 的元素出列即可。