HAVING 子句 - Amazon Kinesis Data Analytics
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

HAVING 子句

SELECT 中的 HAVING 子句指定要在组或聚合内应用的条件。换言之,HAVING 将在应用 GROUP BY 子句的聚合后筛选行。由于 HAVING 是在 GROUP BY 之后计算的,因此它只能引用通过分组键、聚合表达式和常量构造 (或派生) 的表达式。(这些是应用于 GROUP BY 查询的 SELECT 子句中的表达式的相同规则。) HAVING 子句必须位于任何 GROUP BY 子句之后和任何 ORDER BY 子句之前。HAVING 类似于 WHERE 子句,但适用于组。HAVING 子句中的结果表示对原始行的分组或聚合,而 WHERE 子句中的结果是独立的原始行。

在非流式应用程序中,如果没有 GROUP BY 子句,则将假设 GROUP BY () (但由于没有分组表达式,表达式只能包含常量和聚合表达式)。在流式查询中,如果没有 GROUP BY 子句,则无法使用 HAVING。

WHERE 和 HAVING 可同时在一个 SELECT 语句中出现。WHERE 从流或表中选择满足其条件 (WHERE 条件) 的单个行。GROUP BY 条件仅适用于通过 WHERE 条件选择的行。

此类分组 (例如“GROUP BY CustomerID”) 可由 HAVING 条件进一步限定,分组随后将在指定分组中选择满足其条件的行的聚合。例如,“GROUP BY ClientID HAVING SUM(ShipmentValue) > 3600”将仅选择这样的客户:其各个货物均符合 WHERE 条件且货物总价值超过 3600。

有关同时适用于 HAVING 和 WHERE 子句的条件,请参阅 WHERE 子句语法表。

条件必须是一个布尔谓词表达式。查询仅返回谓词计算结果为 TRUE 的行。

以下示例显示一个流式查询,该查询显示过去 1 小时内订单金额超过 1000 美元的产品。

SELECT STREAM "prodId" FROM "Orders" GROUP BY FLOOR("Orders".ROWTIME TO HOUR), "prodId" HAVING SUM("quantity" * "price") > 1000;