两张表解决

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

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
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
就这个 写法靠谱点
1 回复 分享
发布于 2021-04-26 18:47
终于找到和我方法一样的了
1 回复 分享
发布于 2021-04-14 05:31
如果某一个部门比如1002有两个员工,一个收入15000一个10000,而部门1003的最高工资是10000,那么最后就会出现1002的两个员工的值都被返回吧
1 回复 分享
发布于 2020-09-08 12:49
我想问下为什么要加and d.to_date = '9999-01-01',and s.to_date = '9999-01-01' 这两句,感觉这2句条件没什么作用呀,去掉也一样。
2 回复 分享
发布于 2021-09-27 15:21
那如果部门d001里有两个员工都是1000,且1000是最大的呢,会返回两条记录吗
2 回复 分享
发布于 2021-05-19 16:14
你的是最好的,简单又清晰。其他人的废话太多啦
2 回复 分享
发布于 2021-03-11 09:42
感觉好多新手不认真思考就乱回答,sql写的是没错的,就是不知道和第一赞的哪个效率高
1 回复 分享
发布于 2021-12-24 21:43
你这没法查询同部门2个最高薪水一样的人
1 回复 分享
发布于 2021-11-22 16:06
感谢贴主,这是我能看懂的里面最可行的了 补充一点max(s.salary) as salary 这句建议写成as maxSalary
1 回复 分享
发布于 2021-09-14 12:01
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 /* 部门编号,当前最高薪水 */ 这个没太明白,用max函数的结果会和部门对应嘛?
点赞 回复 分享
发布于 2023-12-09 18:54 广东
select dept_no,emp_no,salary from ( select de.dept_no,de.emp_no,s.salary,max(s.salary) over (partition by de.dept_no) as max_salary from dept_emp de left join salaries s on de.emp_no=s.emp_no ) t1 where salary=max_salary order by dept_no; 用窗口函数,如果一个部门存在2个人薪水都是最高的,还可以查出来
点赞 回复 分享
发布于 2023-04-10 15:10 上海
谢谢
点赞 回复 分享
发布于 2023-03-14 20:23 天津
用逗号隔开的两张表是什么查询呀
点赞 回复 分享
发布于 2022-12-03 21:22 北京
太长了,短些吧
点赞 回复 分享
发布于 2022-08-11 17:08
能看懂,可是自己做不出来0.0
点赞 回复 分享
发布于 2022-06-03 15:48
思路差不多 select d1.dept_no,d1.emp_no,s1.salary from dept_emp d1 join salaries s1 on d1.emp_no = s1.emp_no where s1.salary >= ALL( select s2.salary from dept_emp d2 join salaries s2 on d2.emp_no = s2.emp_no where d1.dept_no = d2.dept_no ) order by d1.dept_no
点赞 回复 分享
发布于 2022-01-22 19:19
最开始可以改成distinct uni.dept_no解决有多名员工都是最高薪水的问题
点赞 回复 分享
发布于 2021-11-14 10:31

相关推荐

评论
353
46
分享

创作者周榜

更多
牛客网
牛客企业服务