You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL多表查询报错:求各部门平均薪资GROUP BY子句错误咨询

解决MySQL分组查询中ONLY_FULL_GROUP_BY的报错问题

这个报错是因为MySQL开启了ONLY_FULL_GROUP_BY模式(5.7及以上版本默认启用),它要求SELECT语句里的非聚合列必须要么出现在GROUP BY子句中,要么完全依赖于GROUP BY里的列。你原来的查询里,dept.dname既不在GROUP BY里,MySQL也没识别到它和emp.deptno的依赖关系(虽然deptno是dept表的主键,理论上dname由deptno唯一确定),所以才抛出错误。

给你两种靠谱的解决方法:

方法一:将非聚合列加入GROUP BY子句

既然dname和deptno是一一对应的,把它加到GROUP BY里完全没问题,这也是最符合SQL标准的写法,同时改用更清晰的JOIN语法代替旧的逗号连接:

SELECT emp.deptno, dept.dname, AVG(emp.sal) AS avg_sal
FROM emp
INNER JOIN dept ON emp.deptno = dept.deptno
GROUP BY emp.deptno, dept.dname;

方法二:先聚合再关联(子查询方式)

先在emp表中计算出每个部门的平均薪资,再和dept表关联获取部门名称,这种方式逻辑更直观,也能避开分组时的列依赖问题:

SELECT d.deptno, d.dname, e.avg_sal
FROM dept d
INNER JOIN (
    SELECT deptno, AVG(sal) AS avg_sal
    FROM emp
    GROUP BY deptno
) e ON d.deptno = e.deptno;

两种方法都能得到你想要的结果:

deptno| dname | avg_sal

20 | Accounting| 1000
30 | Sales | 1500

内容的提问来源于stack exchange,提问作者Tanay Joshi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 19:17:54