【发布时间】:2020-02-19 19:20:52
【问题描述】:
我正在尝试使用HAVING 子句过滤GROUP BY CUBE 的结果。但是我需要保留不满足条件组合的行。
我凭直觉尝试过:
SELECT [...]
FROM [...]
NOT HAVING (flag_1 = 1 AND flag_2 = 1 AND flag_3 = 1)
GROUP BY CUBE [...]
遗憾的是,Oracle 无法将 NOT HAVING 识别为有效语法。
从数学的角度来看,反转每个单独的条件不会产生相同的结果:
HAVING (flag_1 != 1 AND flag_2 != 1 AND flag_3 != 1)
如何实现NOT HAVING 的逻辑等效?
注意:我发现了一个与 Microsoft Access 相关的现有问题,但它特定于 Microsoft Access,并且目标不一样,因此提出了这个新问题。
【问题讨论】:
-
First 是偶数
HAVING (flag_1 = 1 AND flag_2 = 1 AND flag_3 = 1)有效吗?第二个从数学/SQL 的角度来看col = 1反转是col != 1 or col IS NULL- 三值逻辑 -
试试
HAVING NOT (flag_1=1...) -
根据排序和单列引用,这似乎不适合
HAVING。HAVING子句用于过滤某种聚合表达式。如果您只想根据列值进行过滤,则需要WHERE NOT (flag_1 = 1 ...)。 -
您正在寻找
WHERE而不是NOT HAVING。对于您正在测试的条件,没有理由使用HAVING或NOT HAVING。 SQL 教程可能有用。 -
@KenWhite 实际上我正在寻找过滤后聚合,而不是预聚合。因此
HAVING而不是WHERE。
标签: oracle aggregate-functions cube having-clause oracle8i