微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Simple Case 语句返回 ORA-00937: not a single-group group function

如何解决Simple Case 语句返回 ORA-00937: not a single-group group function

当我尝试执行以下块时,它返回 ORA-00937。有人可以帮助这里发生的事情吗?

select case when count(1)=0 then (select 0 from dual)
          else (select 1 from dual )
          end  test1 
from dual;

这只是我尝试过的简化示例,我正面临此错误我有一个相当复杂的查询,它具有相似的结构但失败并出现相同的错误

解决方法

聚合查询对子查询不友好。你可能已经知道你可以写什么:

select (case when count(*) = 0 then 0 else 1 end) as test1
from dual;

或者更简洁:

select sign(count(*)) as test1
from dual;
,

错误消息专门指向 select 0 from dual 中的 0;为什么它特别指出这一点尚不清楚,因为 0 本身是一个常量(因此它总是一个 GROUP BY 表达式,无论发生什么)。 Gordon Linoff 更有可能是对的:标量子查询本身就是问题所在,因为 Oracle 不会“现在”(在编译时)评估它,它只是说“我不能假设它会变成一个持续的”。在这种情况下,错误消息应指向子查询的开头,而不是其中的 0。哦,好吧...

无论如何:如果你想以等效的方式重写它,从一开始就有效,你可以这样做:

select case when exists (select * from dual) then [the first thing]
       else [the other thing] end ....

count(1) = 0 条件替换您的 exists - 不同之处在于不涉及聚合。

,

在我的复杂查询中的一个列上使用 group by 后,错误得到解决。

例如,在上面给出的示例中,如果您添加以下 group by,它将开始工作。

select case when count(1)=0 then (select 0 from dual)
          else (select 1 from dual )
          end  test1 
from dual group by dummy;

注意:我们应用分组依据的列,所有行的值必须相同。

抱歉迟到了。感谢大家的评论。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。