ORA-00979非GROUP BY表达式报错:SELECT含titles.title字段异常原因咨询
ORA-00979报错原因说明
根本原因是Oracle对GROUP BY语法的强制规则要求:所有在SELECT子句中出现的非聚合函数字段,必须全部包含在GROUP BY子句的分组字段列表中。
结合你的场景具体分析:
- 你的SQL中GROUP BY子句仅指定了
titleauth.dates作为分组字段,也就是说最终只会按年份生成2个分组:2021组、2022组 - 2021分组对应的关联titles表数据有两条:TITLE_ID=1对应title为
s1、TITLE_ID=2对应title为s2,同一个分组下存在两个不同的title值,数据库无法判断应该返回哪个值作为该分组的title结果,因此触发not a GROUP BY expression报错 - 当你删除SELECT子句中的
titles.title字段后,剩下的非聚合字段只有titleauth.dates,该字段已经在GROUP BY子句中,完全符合Oracle语法规则,因此可以正常执行返回结果。
如果需要保留titles.title字段展示,可以选择两种修改方案:
- 方案1:将
titles.title也加入GROUP BY分组字段列表,即group by titleauth.dates, titles.title;,此时会按年份+title的组合进行分组 - 方案2:给
titles.title套聚合函数,比如max(titles.title)、min(titles.title)等,明确指定取分组内的哪个title值
内容的提问来源于stack exchange,提问作者rahul
相关产品推荐
相关产品推荐

