题目描述
有一个员工表 employees 简况如下:

有一个薪水表 salaries 简况如下:

请你查找薪水排名第二多的员工编号 emp_no、薪水 salary 、last_name 以及 first_name ,不能使用 order by 完成,以上例子输出为:
(温馨提示: sqlite 通过的代码不一定能通过 mysql ,因为 SQL 语法规定,使用聚合函数时,select 子句中一般只能存在以下三种元素:常数、聚合函数,group by 指定的列名。如果使用非 group by 的列名,sqlite 的结果和 mysql 可能不一样)

考察知识点
INNER JOIN,MAX,子查询。
解题思路
先利用 MAX() 函数找出 salaries 中当前薪水最高者,再找出小于最高薪水的 MAX(salary) ,即为第二高薪水。然后在内连接而成的表中根据题中条件筛选即可。
SELECT e.emp_no, salary, last_name, first_name
FROM employees AS e INNER JOIN salaries AS s
ON e.emp_no = s.emp_no
AND s.salary = (SELECT max(salary)
FROM salaries
WHERE salary < (SELECT MAX(salary)
FROM salaries))
题目来源:牛客网-SQL数据库实战题
✅ 每日打卡,❤ 点个赞再走吧!!!❤
后续会继续分享 Mysql 方面的文章,如果感兴趣的话可以点个关注不迷路哦~。
本文指导如何通过INNER JOIN、MAX函数和子查询技巧,解决SQL实战中的问题,寻找薪水排名第二的员工详细信息,避开ORDER BY限制。

5623





