题目描述

有一个员工表 employees 简况如下:

查找当前薪水排名第二多的员工编号emp_no - 图1

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

查找当前薪水排名第二多的员工编号emp_no - 图2

请你查找薪水排名第二多的员工编号 emp_no,薪水 salary,员工的 last_name 以及 first_name 要求不能使用 ORDER BY 完成,上述示例的查询结果为:

查找当前薪水排名第二多的员工编号emp_no - 图3

答案解析

本题有一个特殊的要求,不能使用 ORDER BY
思路:

  1. 首先查询出 salaries 表的最高工资
  2. 查询出 salaries 表除了最高工资以外的最高工资(第二高工资)
  3. 将第二高工资作为查询条件进行子查询

本题有多重子查询嵌套,SQL 语句如下:

  1. SELECT e.emp_no,s.salary,e.last_name,e.first_name
  2. FROM employees AS e INNER JOIN salaries AS s
  3. ON e.emp_no = s.emp_no
  4. WHERE s.salary = ( -- 第三步:将第二高工资作为查询条件,使用子查询
  5. -- 第二步:查出除了原表最高工资以外的最高工资(第二高工资)
  6. SELECT MAX(salary) FROM salaries
  7. WHERE salary < (
  8. -- 第一步:查询出原表最高工资
  9. SELECT MAX(salary) FROM salaries
  10. )
  11. );

_