题解 | #获取每个部门中当前员工薪水最高的相关信息#
获取每个部门中当前员工薪水最高的相关信息
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