1.将表根据salary进行逆排序,并选择排第一个的record后面一个record(limit 1,1),也就是第二个,最后选择emp_no和salary。

select emp_no, salary from salaries
order by salary desc limit 1,1

但是以上方法不足之处在于,limit选择的是行数而不是排名,比如这道题用limit 1,1选择的就是第二行,但要是出现并列第一的情况就会出错。所以这里提供第二种办法。

2.使用rank()。在子查询中使用rank()对salary进行排序,用where限制ranking=2,然后从子查询中选择emp_no和salary。为了防止第二名也有并列情况,使用limit 1将结果限制在第一行。

select emp_no, salary from
(select emp_no, salary, rank() over (order by salary desc) as ranking 
from salaries) as temp
where ranking=2 limit 1