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

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

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”,可以通过有条件进一步限定,然后在指定分组中选择满足其条件的行的聚合。例如,“按 ClientID 分组有总和 (ShipmentValue) > 3600" 将只选择那些符合WHERE标准的各种货物的总价值也超过3,600的客户。

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

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

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

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