题目:
获取当前薪水第二多的员工的emp_no以及其对应的薪水salary_牛客题霸_牛客网
有一个薪水表salaries简况如下:
emp_no | salary | from_date | to_date |
10001 | 88958 | 2002-06-26 | 9999-01-01 |
10002 | 72527 | 2001-08-02 | 9999-01-01 |
10003 | 43311 | 2001-12-01 | 9999-01-01 |
10004 | 74057 | 2001-11-27 | 9999-01-01 |
请你查找薪水排名第二多的员工编号emp_no、薪水salary、last_name以及first_name,不能使用order by完成,以上例子输出为:
(温馨提示:sqlite通过的代码不一定能通过mysql,因为SQL语法规定,使用聚合函数时,select子句中一般只能存在以下三种元素:常数、聚合函数,group by 指定的列名。如果使用非group by的列名,sqlite的结果和mysql 可能不一样)
emp_no | salary | last_name | first_name |
10004 | 74057 | Koblick | Chirstian |
题解:
步骤:
1.去掉第一高薪水
2.在去掉第一高薪水的表中找到第一高的,即为之前的第二高
3.找到薪水为第2步骤得到的行
select
e.emp_no,
s.salary,
e.last_name,
e.first_name
from
employees e
join
salaries s
on
e.emp_no = s.emp_no
where
salary = (
select
max(salary) #在去掉第一高薪水的表中找到第一高的,即为之前的第二高
from
salaries
where
salary <> ( #去掉第一高薪水
select
max(salary)
from
salaries
where
to_date = '9999-01-01'
)
and to_date = '9999-01-01'
)
and s.to_date = '9999-01-01'