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

Oracle SQL提示Not a group by expression,查询语句问题出在哪里?

Oracle SQL GROUP BY 错误修复说明

问题原因

Oracle 对 GROUP BY 语法的执行规则为:SELECT 子句中所有未使用聚合函数的列、HAVING 子句中所有未使用聚合函数的列,都必须包含在 GROUP BY 的分组字段列表中,否则就会触发 Not a group by expression 报错。你的语句存在两处不符合规则的问题:

  • SELECT 列表中的 e.name 属于非聚合字段,没有加入 GROUP BY 分组列表
  • HAVING 子句中的 e.did 属于非聚合字段,既没有加入 GROUP BY 分组列表,同时部门过滤属于行级过滤逻辑,放在 HAVING 中会先全量分组再过滤,执行效率极低,应该提前放到 WHERE 子句中执行

修正后的代码

SELECT 
    e.empid AS "ID", 
    e.name AS "Employee Name", 
    COUNT(w.pid) AS "Total Projects", 
    SUM(w.hours) AS "Total Hours"
FROM employee e 
INNER JOIN workon w ON e.empid = w.empid
WHERE e.did = (SELECT did FROM division WHERE LOWER(dname) = LOWER('marketing'))
GROUP BY e.empid, e.name;

补充说明

如果 empid 是 employee 表的主键,仅按主键分组从逻辑上可以唯一确定员工姓名,但 Oracle 严格遵循 SQL 标准要求,必须显式将所有非聚合查询字段加入 GROUP BY 列表,避免逻辑歧义。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 13:54:00