高频面经汇总:https://blog.csdn.net/qq_40262372/article/details/116075528
一、问题分析
其中错误的原因是说group by 哪一句中的select 的字段是不对的。
二、情景还原
dept_emp表:
salaries表:
我想去查询每个部门人员薪水,于是写下了这样的sql:
select
de.dept_no ,s.salary
from
dept_emp de
left join
salaries s
on
de.emp_no = s.emp_no
group by
de.dept_no
于是成功报错。
三、报错的原因
group by 与 select 使用的时候。 select只能去查询分组的聚合变量。
什么是聚合变量呢?
比如我们上面的sql是利用部门编号分组的。
因此我们的组别是部门,但是我们查询的salary是人员属性,不是部门的,因此属于非聚合字段。
要怎么才能成功呢? 用max(salary) 用上聚合函数,将非聚合字段成为聚合字段。 这样salary就是找出该部门的最大值。 就会附带部门的属性了!!!
执行如下sql:
select
de.dept_no ,max(s.salary)
from
dept_emp de
left join
salaries s
on
de.emp_no = s.emp_no
group by
de.dept_no
成功: