思考

  1. 按照salary进行倒叙排序
  2. 用limit取排在第二个的即可
    • limit y: 读取 y 条数据
    • limit x, y: 跳过 x 条数据,读取 y 条数据
    • limit y offset x: 跳过 x 条数据,读取 y 条数据

答案

select emp_no, salary
from salaries
order by salary DESC
limit 1,1;

优化

上述答案只适用于每个员工的salary不同的情况,如果有几个员工的salary相同,那么上述答案还是只会输出一个员工,这显然是不合理的。答案优化:

select emp_no, salary
from salaries
where salary = (
    select distinct salary
    from salaries
    order by salary DESC
    limit 1, 1);

注:理论上这里用 in 代替 = 应该也可以,但牛客会报错;另外,优化后的方案运行时间比原答案长