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

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

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

这题用到的是一种特殊的子查询:关联子查询。
首先,要提到的一个易错点在于,当使用聚合函数和group by 的时候,select 子句中,除了聚合函数和用于分类列名,不能出现其他列名。 如果需要加入其他列名,则使用where子句,把聚合函数作为条件的形式出现在子查询中。
其次,这里不能使用子查询,而是使用关联子查询。与一般子查询的区别,也是起到关键作用的是:在子查询中插入where子句的条件。该条件的意思是,在同一个类别中对某一细分和聚合函数值(max.average等)进行对比。子查询中“where de2.dept_no = de.dept_no”在这里的意思即,把在同一部门中对各员工的薪水和最高薪水进行比较。

select de.dept_no, de.emp_no, s.salary
from dept_emp as de inner join salaries as s
on de.emp_no = s.emp_no
where s.salary = (select max(s2.salary)
from dept_emp as de2 inner join salaries as s2
on de2.emp_no = s2.emp_no
where de2.dept_no = de.dept_no
group by de2.dept_no)
order by de.dept_no

全部评论
您好! 我明白您想表述的意思,可是我根据信息单独建立数据库及表后,为什么直接采用关联表及子查询结合group by 就可以直接实现想用的结果。 select a1.dept_no, a2.emp_no, max(a2.salary) as maxSalary from dept_emps as a1 left outer join salaries as a2 on a1.emp_no=a2.emp_no group by a1.dept_no order by a1.dept_no;
1 回复 分享
发布于 2021-05-24 19:04
这个很好,那些等于WHERE d.to_date="9999-01-01",就没明白为啥要限制这个。结构倒推?
1 回复 分享
发布于 2021-05-26 13:21
子查询前面应该加一个in 关键字
1 回复 分享
发布于 2022-02-05 18:31
同解
点赞 回复 分享
发布于 09-04 14:45 湖南

相关推荐

评论
10
3
分享
牛客网
牛客企业服务