方法一
思路:获取第二多,排序使用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'"