本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
SUM
从窗口式查询返回一组值的和。根据时间或行定义窗口式查询。有关窗口式查询的信息,请参阅窗口式查询。
在使用 SUM 时,请注意以下事项:
如果您未使用
OVER
子句,则SUM
将作为聚合函数进行计算。在这种情况下,聚合查询必须根据将流分组到有限行中的ROWTIME
在单调表达式中包含 GROUP BY 子句。否则,组将是无限流,并且查询永远无法完成,也不会输出任何行。有关更多信息,请参阅 聚合函数。-
使用 GROUP BY 子句的窗口式查询在滚动窗口中处理行。有关更多信息,请参阅滚动窗口(使用 GROUP BY 的聚合)。
如果您使用
OVER
子句,则SUM
将作为分析函数进行计算。有关更多信息,请参阅 分析函数。-
使用 OVER 子句的窗口式查询在滑动窗口中处理行。有关更多信息,请参阅滑动窗口
语法
滚动窗口式查询
SUM(number-expression) ... GROUP BY monotonic-expression | time-based-expression
滑动窗口式查询
SUM([DISTINCT | ALL] number-expression) OVER window-specification
参数
DISTINCT
仅对唯一值进行计数。
ALL
计算所有行。ALL
是默认值。
number-expression
指定针对聚合中的每一行计算的值表达式。
OVER window-specification
划分流中按时间范围间隔或行数分区的记录。窗口规范定义流中记录的划分方式 (按时间范围间隔或行数)。
按单调表达式分组 | time-based-expression
基于分组表达式的值为记录分组,从而针对在所有列中具有相同值的每组行返回一个摘要行。
示例
示例数据集
以下示例基于样本股票数据集,后者是 Amazon Kinesis Analytics 开发人员指南中的入门练习的一部分。要运行每个示例,您需要一个具有样本股票代码输入流的 Amazon Kinesis Analytics 应用程序。要了解如何创建 Analytics 应用程序和配置样本股票代码输入流,请参阅 Amazon Kinesis Analytics 开发人员指南中的入门。
具有以下架构的示例股票数据集。
(ticker_symbol VARCHAR(4), sector VARCHAR(16), change REAL, price REAL)
示例 1:使用 GROUP BY 子句返回值的和
在此示例中,聚合查询在 ROWTIME
上有一个 GROUP BY
子句,可将流分组到有限行中。随后,从 SUM
子句返回的行计算 GROUP BY
函数。
使用 STEP(推荐)
CREATE OR REPLACE STREAM "DESTINATION_SQL_STREAM" ( ticker_symbol VARCHAR(4), sum_price DOUBLE); CREATE OR REPLACE PUMP "STREAM_PUMP" AS INSERT INTO "DESTINATION_SQL_STREAM" SELECT STREAM ticker_symbol, SUM(price) AS sum_price FROM "SOURCE_SQL_STREAM_001" GROUP BY ticker_symbol, STEP("SOURCE_SQL_STREAM_001".ROWTIME BY INTERVAL '60' SECOND);
使用 FLOOR
CREATE OR REPLACE STREAM "DESTINATION_SQL_STREAM" ( ticker_symbol VARCHAR(4), sum_price DOUBLE); -- CREATE OR REPLACE PUMP to insert into output CREATE OR REPLACE PUMP "STREAM_PUMP" AS INSERT INTO "DESTINATION_SQL_STREAM" SELECT STREAM ticker_symbol, SUM(price) AS sum_price FROM "SOURCE_SQL_STREAM_001" GROUP BY ticker_symbol, FLOOR("SOURCE_SQL_STREAM_001".ROWTIME TO MINUTE);
结果
上一示例输出的流与以下内容类似。

使用说明
Amazon Kinesis Analytics 不支持应用于间隔类型的 SUM
。此功能偏离了 SQL:2008 标准。
SUM
会忽略来自值集或数字表达式的 null 值。例如,以下各项返回值 6:
AVG(1, 2, 3) = 6
SUM(1,null, 2, null, 3, null) = 6