题目描述
描述
有一个薪水表salaries简况如下:
请你获取薪水第二多的员工的emp_no以及其对应的薪水salary
示例1
输入:
drop table if exists `salaries` ;
CREATE TABLE `salaries` (
`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`));
INSERT INTO salaries VALUES(10001,88958,'2002-06-22','9999-01-01');
INSERT INTO salaries VALUES(10002,72527,'2001-08-02','9999-01-01');
INSERT INTO salaries VALUES(10003,43311,'2001-12-01','9999-01-01');
复制
输出:
10002|72527
题解
刚开始可能会想到直接LIMIT
运行时间:15ms
超过68.73% 用Sqlite提交的代码
占用内存:3584KB
超过8.36%用Sqlite提交的代码
SELECT emp_no, salary FROM salaries
WHERE to_date == '9999-01-01'
ORDER BY salary DESC
LIMIT 1,1;
但是如果有很多个并列第二工资的员工呢?所以还是要把上面的解作为子查询,让salary等于这个第二名薪水的所有emp_no, salary取出来。
运行时间:13ms
超过80.17% 用Sqlite提交的代码
占用内存:3456KB
超过20.62%用Sqlite提交的代码
SELECT emp_no, salary FROM salaries
WHERE salary = (
SELECT salary FROM salaries
WHERE to_date == '9999-01-01'
ORDER BY salary DESC
LIMIT 1,1
);