我正在尝试构建一个可以由监控平台运行的相当直接的查询。出于这个问题的目的,如果满足警报标准,我需要我的查询返回1,如果一切正常则返回0。这是我正常工作的查询片段:
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的新手,并且非常感谢有关如何做同样类型的嵌套查询案例表达式。如果我用嵌套查询替换整数值也会返回单个整数结果,为什么会出现上述错误?
提前感谢任何建议!
答案 0 :(得分: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'