题目描述
获取当前(to_date=‘9999-01-01’)薪水第二多的员工的emp_no以及其对应的薪水salary
CREATE TABLEsalaries
(
emp_no
int(11) NOT NULL,
salary
int(11) NOT NULL,
from_date
date NOT NULL,
to_date
date NOT NULL,
PRIMARY KEY (emp_no
,from_date
));
解题思路
有两种思路,个人认为第一个思路虽然难理解,但是不会存在bug;第二个思路好理解但是可能有问题。
思路1是先根据to_date
条件选出最大的salary
,然后去除最大的salary
后,在剩下的薪水中选出最大的。
思路2是降序排列数组,然后使用limit
偏移一个单位,可是这样默认薪水都不重复。如果最多的薪水有重复的,那么就是错的了。但是这个题目没有重复的。
AC代码
思路1地AC代码
SELECT emp_no, salary FROM salaries WHERE (to_date = '9999-01-01' AND salary IN (SELECT MAX(salary) FROM salaries WHERE (to_date = '9999-01-01' ANDsalary NOT IN (SELECT MAX(salary) FROM salaries WHERE (to_date = '9999-01-01')))))
思路2的AC代码
select emp_no,salary from salaries where to_date = '9999-01-01'order by salary desc limit 1,1;