我对 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 子句,但执行聚合的子查询有效。
我可以使用临时表来解决这个问题,但这似乎很浪费。
您发布的第一个查询不应在 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;