方法一:

思路: 先子查询出每个部门的最大工资和部门编号,外部查询用 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 字段_表)