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

ORA-00937非单分组组函数报错(已用GROUP BY)原因排查

ORA-00937错误原因及修复方案

错误根因

你触发错误的核心原因是聚合函数的作用范围和GROUP BY的位置不匹配:

  • 你写的GROUP BY子句只作用于内层的port1子查询,和外层主查询无关
  • 外层主查询的SELECT列表中同时出现了非聚合字段po.plop_sq_planej_oper、port.rtsi_cd_rtsubitem和聚合函数count(*),但没有给外层查询加对应的GROUP BY子句,不符合Oracle的SQL语法规范:只要查询中使用了聚合函数,所有未包裹在聚合函数内的查询字段,都必须放到GROUP BY子句中。

官方报错提示的第1行第8列刚好对应主查询SELECT后的首个字段位置,也印证了是外层查询的语法问题。

修复方案

如果你是要按plop_sq_planej_oper和rtsi_cd_rtsubitem分组统计符合条件的记录数,只需要在外层查询的WHERE条件末尾加上对应的GROUP BY即可,修改后的SQL如下:

select po.plop_sq_planej_oper,
       port.rtsi_cd_rtsubitem, 
       (count(*)-1) as qnt_lista
  from sigiop.planejamento_operacional po,
       sigiop.planejamento_operacional_rt port,
       sigiop.rt_subitem rtsi,
       (select po1.plop_sq_planej_oper,
               po1.plop_dt_criacao,
               rtsi1.rtit_cd_rtitem
          from sigiop.planejamento_operacional po1,
               sigiop.planejamento_operacional_rt port1,
               sigiop.rt_subitem rtsi1
         where po1.plop_sq_planej_oper = port1.plop_sq_planej_oper
           and port1.rtsi_cd_rtsubitem = rtsi1.rtsi_cd_rtsubitem
      group by po1.plop_sq_planej_oper,
               po1.plop_dt_criacao,
               rtsi1.rtit_cd_rtitem) port1
 where po.plop_sq_planej_oper = port.plop_sq_planej_oper
   and port.rtsi_cd_rtsubitem = rtsi.rtsi_cd_rtsubitem
   and po.plop_dt_criacao >= port1.plop_dt_criacao(+)
   and rtsi.rtit_cd_rtitem = port1.rtit_cd_rtitem(+)
 -- 新增外层GROUP BY
 group by po.plop_sq_planej_oper, port.rtsi_cd_rtsubitem

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 06:54:01