方法一:
思路: 先子查询出每个部门的最大工资和部门编号,外部查询用 in 匹配即可
代码:
select dd.dept_no, dd.emp_no, ss.salary maxSalary from dept_emp dd left join salaries ss on dd.emp_no = ss.emp_no where (dd.dept_no, ss.salary) in ( select dept_no, max(salary) maxSalary from dept_emp d left join salaries s on d.emp_no = s.emp_no group by dept_no ) order by dept_no
注意:
以下这个 sql 语句是错误的
错误代码示例:
select d.dept_no, d.emp_no, max(salary) maxSala from dept_emp d left join salaries s on d.emp_no = s.emp_no group by d.dept_no
解释说明:
对于 GROUP BY 聚合操作,如果在 SELECT 中的列,没有在 GROUP BY 中出现,那么这个 SQL 是不合法的,因为列不在 GROUP BY 语句中,也就是说查出来的列必须是 GROUP BY 之后的字段,或者这个字段出现在聚合函数里面。
in 的用法:
select * from table_name where column_name in (selec 字段 from 字段_表)