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



京公网安备 11010502036488号