如何在没有团体的情况下使用?

时间:2014-03-12 14:12:21

标签: oracle group-by having

我正在阅读oracle中的having子句。

它写在

的文档中
  

如果没有GROUP BY子句,则将HAVING子句应用于   整个结果作为一个整体。

但是每当我尝试使用不having的{​​{1}}子句时,我都会遇到语法错误。

如何在没有group by的情况下使用having

有人可以用这个模式解释我吗?

SQL fiddle

2 个答案:

答案 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