今天做牛客这套题时候,发现查询出来了第二大的工资,但是对应的人是错误的
题目如下
请你查找薪水排名第二多的员工编号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一起使用也有这样的坑