通过子查询读取组时出现ORA-00937

问题描述 投票:0回答:1

我对 Oracle Db 比较陌生,这可能是一些愚蠢的事情,但我找不到这个查询的问题是什么。当我运行它时,我得到 ORA-00937: not a single-group group function

select a.col_a, a.col_b, a.amt
from (
    select col_a, col_b, sum(col_c) as amt
    from table_a
    group by col_a, col_b
) a
where a.amt <> 0;

子查询本身就可以工作。更糟糕的是,这也有效:

select *
from (
    select col_a, col_b, sum(col_c) as amt
    from table_a
    group by col_a, col_b
) a;

这显然是一个说明,我无法发布实际的代码,但请相信我,有充分的理由以这种方式组织代码。

我也尝试过使用 CTE 进行子查询,但没有任何改变。将

select *
包装为另一个子查询也没有帮助。

奇怪的是,该错误表明我使用的聚合函数没有正确的 group by 子句,但执行聚合的子查询有效。

我可以使用临时表来解决这个问题,但这似乎很浪费。

sql oracle oracle19c
1个回答
0
投票

您发布的第一个查询不应在 Oracle 上引发任何错误。 话虽这么说,您不需要,甚至可以说不应该在此处使用子查询。 只需进行一次聚合,然后使用

HAVING
子句断言正和:

SELECT col_a, col_b, SUM(col_c) as amt
FROM table_a
GROUP BY col_a, col_b
HAVING SUM(col_c) > 0;
© www.soinside.com 2019 - 2024. All rights reserved.