查找薪水排名第二多的员工编号emp_no、薪水salary、last_name以及first_name,不能使用order by完成

如果用order by的话很简单:

SELECT
    e.emp_no,
    salary,
    last_name,
    first_name
FROM
  employees e join salaries s on (e.emp_no = s.emp_no)
ORDER BY salary desc limit 1,1

但是此题要求不能使用order by:
思路:
1、薪水第二多就先找出薪水最多的,然后去掉;
2、1中去掉了最高之后的最高薪水就是我们需要的薪水第二的值了,我们可以直接对这个筛选出来的结果使用max(salary)来找出这个薪水值;
3、连表找到薪水等于2中的薪水的信息就是这道题要找的薪水排名第二多的员工信息啦。

SELECT 
  e.emp_no,
  salary,
  last_name,
  first_name 
FROM 
  employees e join salaries s on (e.emp_no = s.emp_no) WHERE salary = (
    SELECT 
      max(t.salary) 
    FROM 
      (SELECT salary FROM salaries s WHERE salary <> ( SELECT max(salary) FROM salaries ) t 
  )