查找薪水排名第二多的员工编号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 )