今天做牛客這套題時候,發現查詢出來了第二大的工資,但是對應的人是錯誤的
題目如下
請你查找薪水排名第二多的員工編號emp_no、薪水salary、last_name以及first_name,不能使用order by完成
建表語句如下
drop table if exists `employees` ;
drop table if exists `salaries` ;
CREATE TABLE `employees` (
`emp_no` int(11) NOT NULL,
`birth_date` date NOT NULL,
`first_name` varchar(14) NOT NULL,
`last_name` varchar(16) NOT NULL,
`gender` char(1) NOT NULL,
`hire_date` date NOT NULL,
PRIMARY KEY (`emp_no`));
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 employees VALUES(10001,'1953-09-02','Georgi','Facello','M','1986-06-26');
INSERT INTO employees VALUES(10002,'1964-06-02','Bezalel','Simmel','F','1985-11-21');
INSERT INTO employees VALUES(10003,'1959-12-03','Parto','Bamford','M','1986-08-28');
INSERT INTO employees VALUES(10004,'1954-05-01','Chirstian','Koblick','M','1986-12-01');
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');
INSERT INTO salaries VALUES(10004,74057,'2001-11-27','9999-01-01');
最開始使用如下語句
SELECT
e1.emp_no,
max(s1.salary) AS salary,
e1.last_name,
e1.first_name
FROM
employees e1,
salaries s1
WHERE
salary NOT IN (
SELECT
max(s2.salary) AS maxSalary
FROM
employees e2,
salaries s2
WHERE
e2.emp_no = s2.emp_no
)
AND e1.emp_no = s1.emp_no
顯示如下
最後使用這樣的語句可以過的了mysql
SELECT
e1.emp_no,
max(s1.salary) AS salary,
e1.last_name,
e1.first_name
FROM
employees e1,
salaries s1
WHERE
salary = (
SELECT
MAX(salary)
FROM
salaries s3
WHERE
s3.salary NOT IN (
SELECT
max(s2.salary) AS maxSalary
FROM
employees e2,
salaries s2
WHERE
e2.emp_no = s2.emp_no
)
)
AND e1.emp_no = s1.emp_no
之後查詢,發現max() 與group by一起使用也有這樣的坑