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

SQL查询报ORA-00979:not a GROUP BY expression错误求修正

ORA-00979 错误根因

Oracle对分组聚合查询有强语法校验,违反以下规则就会触发该错误:

  • SELECT子句中出现的所有非聚合字段,必须全部包含在GROUP BY的分组字段列表中
  • 不能在GROUP BY分组逻辑中引用SELECT子句里定义的别名

你的SQL触发报错的直接原因:SELECT子句的计算逻辑中使用了非聚合字段WEIGHT_IN_PERCENTAGE,该字段既没有被SUM/COUNT/MAX等聚合函数包裹,也没有被加入GROUP BY分组列表,不符合语法要求。

原始报错信息
ERROR at line 1:
ORA-00979: not a GROUP BY expression

修正方案

因为WEIGHT_IN_PERCENTAGE是作业分类对应的固定权重值,和关联键ASSIGNMENT_CATEGORY(即TYPE_OF_DISTRIBUTION)一一对应,将其加入GROUP BY不会改变原有按学生、学科、作业类型分组的粒度,计算结果和预期完全一致,修正后可直接运行的SQL如下:

SELECT 
    a.STUDENT_NAME, 
    a.SUBJECT, 
    a.TYPE_OF_DISTRIBUTION, 
    SUM(a.POINTS) * d.WEIGHT_IN_PERCENTAGE / (COUNT(a.POINTS) * 100) AS WEIGHTED_SCORE
FROM 
    assignments a 
JOIN
    distributions d ON a.TYPE_OF_DISTRIBUTION = d.ASSIGNMENT_CATEGORY
GROUP BY
    a.STUDENT_NAME,
    a.SUBJECT, 
    a.TYPE_OF_DISTRIBUTION,
    d.WEIGHT_IN_PERCENTAGE
ORDER BY
    a.STUDENT_NAME ASC;

全版本兼容写法

如果不希望调整GROUP BY字段列表,也可以用聚合函数包裹单值属性WEIGHT_IN_PERCENTAGE。由于同一作业分类下权重值唯一,用MAX/MIN函数取值不会改变计算结果,该写法适配所有Oracle版本:

SELECT 
    a.STUDENT_NAME, 
    a.SUBJECT, 
    a.TYPE_OF_DISTRIBUTION, 
    SUM(a.POINTS) * MAX(d.WEIGHT_IN_PERCENTAGE) / (COUNT(a.POINTS) * 100) AS WEIGHTED_SCORE
FROM 
    assignments a 
JOIN
    distributions d ON a.TYPE_OF_DISTRIBUTION = d.ASSIGNMENT_CATEGORY
GROUP BY
    a.STUDENT_NAME,
    a.SUBJECT, 
    a.TYPE_OF_DISTRIBUTION
ORDER BY
    a.STUDENT_NAME ASC;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 07:36:23