SQL12、获取每个部门当前薪水最高的员工的dept_no,emp_no,salary

获取每个部门中当前员工薪水最高的相关信息

http://www.nowcoder.com/questionTerminal/4a052e3e1df5435880d4353eb18a91c6

第一步:每个部门最高的薪水
select 
  d.dept_no,max(s.salary) salary 
from 
  dept_emp d
join 
  salaries s
on 
  d.emp_no=s.emp_no and d.to_date='9999-01-01' and s.to_date='9999-01-01'
group by 
  d.dept_no;
得到表t1
+---------+--------+
| dept_no | salary |
+---------+--------+
| d001    |  88958 |
+---------+--------+
1 row in set (0.01 sec)

第二步(将员工、部门、薪水整合在一张表内):
select 
  d.emp_no,d.dept_no,s.salary 
from 
  dept_emp d
join 
  salaries s
on 
  d.emp_no=s.emp_no and d.to_date='9999-01-01' and s.to_date='9999-01-01';
得到表2:
+--------+---------+--------+
| emp_no | dept_no | salary |
+--------+---------+--------+
|  10001 | d001    |  88958 |
|  10002 | d001    |  72527 |
+--------+---------+--------+
2 rows in set (0.00 sec)

第三步:(将t1和t2整合)
select 
  t1.dept_no,t2.emp_no,t1.salary 
from 
  (表t1) t1
join 
  (表t2) t2
on 
  t1.dept_no=t2.dept_no and t1.salary=t2.salary
order by 
  t1.dept_no;
得到最终结果:
+---------+--------+--------+
| dept_no | emp_no | salary |
+---------+--------+--------+
| d001    |  10001 |  88958 |
+---------+--------+--------+
1 row in set (0.01 sec)

最终代码:
select 
  t1.dept_no,t2.emp_no,t1.salary 
from 
  (select 
    d.dept_no,max(s.salary) salary 
  from 
    dept_emp d
  join 
    salaries s
  on 
    d.emp_no=s.emp_no and d.to_date='9999-01-01' and s.to_date='9999-01-01'
  group by 
    d.dept_no) t1
join 
  (select 
    d.emp_no,d.dept_no,s.salary 
  from 
    dept_emp d
  join 
    salaries s
  on 
    d.emp_no=s.emp_no and d.to_date='9999-01-01' and s.to_date='9999-01-01') t2
on 
  t1.dept_no=t2.dept_no and t1.salary=t2.salary
order by 
  t1.dept_no;
全部评论
d.to_date='9999-01-01' and s.to_date='9999-01-01'应该说的是在职的员工
1 回复 分享
发布于 2021-07-08 09:44
您好,请问下这里为什么要使用'd.to_date='9999-01-01''呢?
2 回复 分享
发布于 2021-03-31 14:47
这个写的逻辑很清楚
2 回复 分享
发布于 2021-07-07 08:29
select a.dept_no,a.emp_no,a.salary maxSalary from ( select row_number()over(partition by de.dept_no order by sa.salary desc) nums,de.dept_no,sa.emp_no,sa.salary from dept_emp de join salaries sa on de.emp_no=sa.emp_no )a where a.nums=1
2 回复 分享
发布于 2022-03-10 17:47
您好,想请教一下为什么很多代码后面都跟着d.to_date='9999-01-01' and s.to_date='9999-01-01'呢,我试了一下不跟着也可以,麻烦您得空回答一下,谢谢
1 回复 分享
发布于 2021-05-31 13:03
同问
点赞 回复 分享
发布于 2021-06-08 15:44
同问,看了很多题解,都涉及到to_date这个字段的限制,不太理解
点赞 回复 分享
发布于 2021-06-17 09:12
为什么第一步中只要提取员工编号就会出现很多的值啊,库里的表里明明没有这么多数据啊 d001|10001|88958 d002|10006|43311 d003|10005|94692 d004|10003|74057 d005|10007|88070
点赞 回复 分享
发布于 2021-07-23 08:54
用group by有办法直接从t2中取出各部门最大薪水及其对应的员工吗
点赞 回复 分享
发布于 2021-09-07 16:18
我和你代码一样 但显示错误,试了你的代码也是错误
点赞 回复 分享
发布于 2021-10-25 10:58
同一个部门有两个人薪水一样呢?
点赞 回复 分享
发布于 2021-11-21 23:26
最后的得到的结果都是错的
点赞 回复 分享
发布于 2021-11-28 18:14
这个人怎么每道题都要限定时间
点赞 回复 分享
发布于 2022-02-18 02:12
请教下这样写有什么弊端嘛 select e.dept_no,e.emp_no,max(s.salary) from dept_emp as e inner join salaries as s on e.emp_no = s.emp_no group by e.dept_no order by e.dept_no
点赞 回复 分享
发布于 2022-05-20 10:54
我这样好像也是可以呀,我试了一下你的报错了。select d.dept_no,d.emp_no,max(s.salary) as maxSalary from dept_emp d join salaries s on d.emp_no = s.emp_no group by d.dept_no order by d.dept_no
点赞 回复 分享
发布于 2022-08-12 10:56

相关推荐

头像
11-06 10:58
已编辑
门头沟学院 嵌入式工程师
双非25想找富婆不想打工:哦,这该死的伦敦腔,我敢打赌,你简直是个天才,如果我有offer的话,我一定用offer狠狠的打在你的脸上
点赞 评论 收藏
分享
微风不断:兄弟,你把四旋翼都做出来了那个挺难的吧
点赞 评论 收藏
分享
服从性笔试吗,发这么多笔,现在还在发。
蟑螂恶霸zZ:傻 x 公司,发两次笔试,两次部门匹配挂,
投递金山WPS等公司10个岗位 >
点赞 评论 收藏
分享
179 25 评论
分享
牛客网
牛客企业服务