查询每个部门最高工资

查询每个部门的最高工资,为啥非得嵌套一个子查询?为啥不能一次性全查出来?
select d.dept_no,d.emp_no,salary
from dept_emp d
join salaries s
on d.emp_no=s.emp_no
where (d.dept_no,salary) in 
(
    select d.dept_no, max(s.salary) as maxSalary 
    from dept_emp d
    join salaries s on d.emp_no=s.emp_no
    group by d.dept_no
   
)
order by d.dept_no

上面是正确答案,是用了子查询的。
可以解释一下这个子查询的必要性吗?为什么不能加上emp_no一起直接查出来吗?我试了不加子查询,但显示emp_no不能被group by,我不是很理解为什么,感谢!

img

group by根据字段分组了了之后,剩下的没被分组的字段有那么多行,如果没有聚合操作(例如取最大值,最小值,求和等),那么在低版本的mysql中可能会随机取一行的值返回,这肯定会出问题。所以在mysql之后的版本就限制了。
select中的字段必须要在group by中或者用聚合操作处理

Group by的字段select也必须有