having-clause

HAVING 子句指定一个中间结果表,该表由 search-condition 为 true 的 R 组组成。

R 是子查询的前一个子句的结果。 如果此子句不是 GROUP BY,那么会将 R 认为是没有分组列的单个组。
Read syntax diagramSkip visual syntax diagramHAVINGsearch-condition
搜索条件中的每个 column-name 都必须满足下列条件之一:
  • 明确标识 R 的分组列。
  • 在聚集函数中指定。
  • 为相关引用。 如果 column-name 在外部子查询中标识 table-reference 的列,那么它是相关引用。

已应用搜索条件的一组 R 为该搜索条件中的每个聚合函数提供了参数,但其参数是相关引用的任何函数除外。

如果搜索条件包含子查询,那么可以认为每次将搜索条件应用于一组 R 并将结果用于应用搜索条件时执行子查询。 实际上,仅当每个组包含相关引用时,才会对该组执行子查询。 有关差异的说明,请参阅 子查询示例中的 示例 6示例 7

对一组 R 的相关引用必须标识一个分组列或包含在聚合函数中。

如果使用 HAVING 但不使用 GROUP BY,那么选择列表只能包含列名(作为聚集函数的参数)、相关列引用、全局变量、主变量、字面值、专用寄存器、SQL 变量或 SQL 参数。

注: 仅当下列表达式包含在聚集函数中时,才能在 HAVING 子句中指定这些表达式 (SQLSTATE 42803):
  • table-designator 的行更改时间戳记
  • table-designator 的行更改标记
  • RID_BIT 或 RID 标量函数