我正在阅读oracle中的having
子句。
它写在
的文档中如果没有GROUP BY子句,则将HAVING子句应用于 整个结果作为一个整体。
但是每当我尝试使用不having
的{{1}}子句时,我都会遇到语法错误。
如何在没有group by
的情况下使用having
?
有人可以用这个模式解释我吗?
答案 0 :(得分:1)
一个简单的实验将证明这是可能的:
select * from dual having 1=1
此查询将在Oracle 11g中成功运行。我怀疑您遇到的问题是您尝试在having
子句中使用聚合函数,并且group by
子句不允许这样做。
虽然没有having
显然可以使用group by
,但我真的没有看到任何意义。您在此方案中放入having
子句的任何条件在where
子句中更合适。
答案 1 :(得分:0)
HAVING
的 GROUP BY
有效。但也要考虑以下几点。
如果没有GROUP BY子句,则HAVING子句作为单个组应用于整个结果。
HAVING中的booleanExpression只能包含分组列,作为聚合表达式一部分的列以及属于子查询的列。
因此,当您使用HAVING
而没有GROUP BY
时,以下语法无效。
1) SELECT col_x .... /* Since col_x is not a part of GROUP BY
或
2) HAVING col_x (in a boolean expression) /* Since col_x is not a part of GROUP BY
在HAVING和SELECT子句中,您可以使用col_x上的聚合函数或常量来代替col_x
。
不要将整个表视为一组意味着GROUP BY col_1, ....col_n