方法一

思路:获取第二多,排序使用limit这个方法不妥当,如果有相同薪水的员工就不太行了

代码:

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

方法二

思路: 找第二多的工资,那么转换一下思维,对于主查询的每一个工资s1,在子查询中统计比s1工资高的个数,如果使用distinct后,这个个数等于1,那么s1肯定是排第二的。

代码:

select s1.emp_no,s1.salary
from salaries as s1
where 
(select count(distinct emp_no)
from salaries
where salary>s1.salary
) = 1

方法三

思路: 直接使用distinct 然后 order by找排名第二的工资,然后将其作为子查询,在主查询中使用 in 即可。思路貌似没问题,但是版本问题,limit和in不可以同时使用,所以这个方法我并没有使用。

代码:

select emp_no,salary
from salaries as s1
where salary in (
select distinct salary
from salaries
order by salary desc
limit 1,1
)

报出错误:This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'"