找出所有部门最高工资--in的元组式使用方法

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

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

方法一

  • 先将每个部门最高工资和对应的部门找出来,形成表t2;
  • 再将每个人对应的的工资及对应的部门找出来形成表t1;
  • 再将t1和t2连接,条件是部门相同,工资相同。

代码:

select t2.dept_no,t1.emp_no,t2.maxSalary
from 
(select s.emp_no,d.dept_no,s.salary
from dept_emp as d
join salaries as s
on d.emp_no = s.emp_no
) as t1
join ( 
select d.dept_no,max(salary) as maxSalary
from dept_emp as d
join salaries as s
on d.emp_no = s.emp_no
group by d.dept_no) as t2
on t1.dept_no = t2.dept_no and t1.salary = t2.maxSalary
-- 应付题目要求,使用排序
order by t2.dept_no

方法二

  • 首先也是将每个人和工资、部门联系起来,然后使用where ;
  • 条件是(部门,工资) in 子查询(部门,最高工资)

代码:

select d.dept_no,d.emp_no,s.salary
from dept_emp as d
join salaries as s
on d.emp_no = s.emp_no
where (d.dept_no,s.salary) in (
-- in 的用法可以使用元组形式
    -- 找出部门和对应的最高工资
select d.dept_no,max(s.salary)
    from dept_emp as d
    join salaries as s
    on d.emp_no = s.emp_no
    group by d.dept_no
)
-- 应付题目要求,排序输出
order by d.dept_no

注:in的方法可以使用元组式的,也就是(字段1,字段2) in select ... (相关子查询)

全部评论
我也是这个
1 回复 分享
发布于 2021-09-03 21:13
select d.dept_no,s.emp_no,s.salary maxSalary from salaries s left join dept_emp d on s.emp_no = d.emp_no where (d.dept_no,s.salary) in( select d.dept_no, max(salary) salary from salaries s left join dept_emp d on s.emp_no = d.emp_no group by d.dept_no ) order by d.dept_no
1 回复 分享
发布于 2021-09-03 21:12

相关推荐

程序员花海:实习和校招简历正确格式应该是教育背景+实习+项目经历+个人评价 其中项目经历注意要体现业务 实习经历里面的业务更是要自圆其说 简历模板尽可能保持干净整洁 不要太花哨的
秋招吐槽大会
点赞 评论 收藏
分享
12-15 11:27
门头沟学院 Java
哇哇的菜鸡oc:所有人不要理会,就好了,后面他就知道怎么回事了,只能说有的时候市场都是被宰的人搞坏的
点赞 评论 收藏
分享
评论
30
4
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务