两张表解决

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

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

select uni.dept_no, uni.emp_no, max_salary.salary
from
    (select d.dept_no, s.emp_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'   
    ) as uni, /* 部门编号,员工编号,当前薪水 */
    (select d.dept_no, max(s.salary) as 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
    ) as max_salary /* 部门编号,当前最高薪水 */
where uni.salary = max_salary.salary
and uni.dept_no = max_salary.dept_no
order by uni.dept_no;

一张表记录最高薪水(部门编号,当前最高薪水),一张表记录所有员工的部门及薪水信息(部门编号,员工编号,当前薪水),用部门编号和薪水相等取到最高薪水的员工ID。

全部评论
如果最高薪水相等怎么整?
3 回复 分享
发布于 2021-01-26 10:34
and d.to_date = '9999-01-01' and s.to_date = '9999-01-01' 这2个写了没啥用吧
2 回复 分享
发布于 2021-08-26 23:16
如果某一个部门比如1002有两个员工,一个收入15000一个10000,而部门1003的最高工资是10000,那么最后就会出现1002的两个员工的值都被返回吧
1 回复 分享
发布于 2020-09-08 12:49
终于找到和我方法一样的了
1 回复 分享
发布于 2021-04-14 05:31
就这个 写法靠谱点
1 回复 分享
发布于 2021-04-26 18:47
我想问下为什么要加and d.to_date = '9999-01-01',and s.to_date = '9999-01-01' 这两句,感觉这2句条件没什么作用呀,去掉也一样。
1 回复 分享
发布于 2021-09-27 15:21
你这没法查询同部门2个最高薪水一样的人
1 回复 分享
发布于 2021-11-22 16:06
select dept_no,a.emp_no,salary from dept_emp a inner join salaries b on a.emp_no=b.emp_no where salary in (select max(salary) from dept_emp a inner join salaries b on a.emp_no=b.emp_no group by dept_no)
1 回复 分享
发布于 2022-02-25 15:08
你的是最好的,简单又清晰。其他人的废话太多啦
2 回复 分享
发布于 2021-03-11 09:42
那如果部门d001里有两个员工都是1000,且1000是最大的呢,会返回两条记录吗
2 回复 分享
发布于 2021-05-19 16:14
感谢贴主,这是我能看懂的里面最可行的了 补充一点max(s.salary) as salary 这句建议写成as maxSalary
1 回复 分享
发布于 2021-09-14 12:01
感觉好多新手不认真思考就乱回答,sql写的是没错的,就是不知道和第一赞的哪个效率高
1 回复 分享
发布于 2021-12-24 21:43
不会啊,其中一个表是按照某个部门取最高薪水
点赞 回复 分享
发布于 2020-12-15 21:36
感觉你这个样子解释更容易让人看懂
点赞 回复 分享
发布于 2021-04-08 22:18
我把to_data的四个条件都删了,也通过了
点赞 回复 分享
发布于 2021-06-01 22:41
and uni.dept_no = max_salary.dept_no 各位..为啥要这一句呢?
点赞 回复 分享
发布于 2021-06-21 00:03
简单明了,思路清晰
点赞 回复 分享
发布于 2021-07-16 19:54
试了下也可以两张表join起来,然后筛选表1工资等于表2工资
点赞 回复 分享
发布于 2021-08-05 14:20
xiexie
点赞 回复 分享
发布于 2021-09-20 15:42
可以可以
点赞 回复 分享
发布于 2021-09-27 10:59

相关推荐

offerboyyyy:感觉也不是降温,你这个hr还挺老实和你说真实情况的,最怕碰到捧杀的
投递华为等公司10个岗位 华为开奖那些事 华子oc时间线
点赞 评论 收藏
分享
无敌虾孝子:喜欢爸爸还是喜欢妈妈
点赞 评论 收藏
分享
343 46 评论
分享
牛客网
牛客企业服务