【问题标题】:Oracle SQL Developer Case Expression nested query causing a "ORA-00937: not a single-group group function" errorOracle SQL Developer 案例表达式嵌套查询导致“ORA-00937: not a single-group group function”错误
【发布时间】:2016-12-13 14:16:38
【问题描述】:

我正在尝试构建一个可以由监控平台运行的相当直接的查询。出于这个问题的目的,如果满足警报条件,我需要我的查询返回 1,如果一切正常,我需要返回 0。这是我有正确工作的查询的 sn-p:

select case when count(*)<1700 
THEN '1' 
ELSE '0' 
END CASE 
FROM SomeTable 
WHERE date_value= '11-DEC-2015';

但是,我不想在比较中硬编码 1700 值,而是想做一个嵌套查询以从同一数据库中的另一个表中提取值。当我像这样重写查询时......:

SELECT case when count(*)<(select count(*) from Another_table) 
THEN '1' 
ELSE '0' 
END CASE 
FROM SomeTable 
WHERE date_value= '11-DEC-2015';

...它在我的嵌套查询开始时返回以下内容:

ORA-00937: 不是单组群函数 00937. 00000 - “不是单组群功能”

我知道可能有更好的方法来进行这种类型的比较,或者可能是我忽略的一些简单的方法,但我对 Oracle SQL 还是很陌生,并且非常感谢任何关于如何进行这种相同类型的比较的建议嵌套查询案例表达式。如果我用同样返回单个整数结果的嵌套查询替换整数值,为什么会出现上述错误?

提前感谢您的任何建议!

【问题讨论】:

  • 大小写表达式,而不是大小写陈述。
  • 好收获;将标题更新为 Case 表达式而不是语句。

标签: sql oracle11g nested case


【解决方案1】:

您最初可以从两个表中获取计数,然后使用这些值进行比较。

select case when s_count < a_count then '1' else '0' end some_col
from (select 
      (select count(*) from another_table) a_count,
      (select count(*) from sometable where date_value= '11-DEC-2015') s_count
      from dual
     ) x

另一种选择是使用count 窗口函数。

select distinct
case when count(*) over() < (select count(*) from another_table) then '1' else '0' end
from sometable
where date_value= '11-DEC-2015'

【讨论】:

  • 哇,这就是我喜欢 StackOverflow 的原因!我知道有更好的方法来思考这个问题,而你的答案正是我所需要的!非常感谢!
猜你喜欢
  • 2021-09-08
  • 2022-09-23
  • 1970-01-01
  • 2015-08-18
  • 2021-10-26
  • 2022-01-22
  • 1970-01-01
  • 2021-09-12
  • 1970-01-01
相关资源
最近更新 更多