本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
AVG
从窗口式查询返回一组值的平均值。窗口查询是按时间或行数定义的。有关窗口式查询的信息,请参阅窗口式查询。要返回在指定时间窗口内选择的值表达式的流的指数加权平均值,请参阅 EXP_AVG。
在使用 AVG 时,请注意以下事项:
如果您不使用该
OVER
子句,AVG
则按聚合函数计算。在这种情况下,聚合查询必须包含GROUP BY 子句基于ROWTIME
将流分组为有限行的单调表达式。否则,该组是无限流,查询将永远不会完成,也不会发出任何行。有关更多信息,请参阅聚合函数:-
使用 GROUP BY 子句的窗口查询在翻滚窗口中处理行。有关更多信息,请参阅滚动窗口(使用 GROUP BY 的聚合)。
如果您使用该
OVER
子句,AVG
则计算为分析函数。有关更多信息,请参阅分析函数:-
使用 OVER 子句的窗口查询在滑动窗口中处理行。有关更多信息,请参阅滑动窗口
语法
滚动窗口式查询
AVG(number-expression) ... GROUP BY monotonic-expression | time-based-expression
滑动窗口式查询
AVG([DISTINCT | ALL] number-expression) OVER window-specification
参数
DISTINCT
仅对值的每个唯一实例执行聚合函数。
ALL
对所有值执行聚合函数。ALL
为默认值。
number-expression
指定针对聚合中的每一行计算的值表达式。
OVER window-specification
将数据流中的记录除以时间范围间隔或行数。窗口规范定义流中记录的划分方式 (按时间范围间隔或行数)。
按单调表达分组 | time-based-expression
基于分组表达式的值为记录分组,从而针对在所有列中具有相同值的每组行返回一个摘要行。
示例
示例数据集
以下示例基于样本库存数据集,该数据集是 Amazon Kinesis Analytics 开发人员指南中入门练习的一部分。要运行每个示例,您需要一个包含样本股票行情输入流的 Amazon Kinesis Analytics 应用程序。要了解如何创建分析应用程序和配置示例股票行情输入流,请参阅 Amazon Kinesis Analytics 开发者指南中的入门指南。
具有以下架构的示例股票数据集。
(ticker_symbol VARCHAR(4), sector VARCHAR(16), change REAL, price REAL)
示例 1:使用 GROUP BY 子句返回平均值
在此示例中,聚合查询有一个GROUP BY
子句ROWTIME
,该子句将流分组为有限的行。随后,从 AVG
子句返回的行计算 GROUP BY
函数。
使用 STEP(推荐)
CREATE OR REPLACE STREAM "DESTINATION_SQL_STREAM" ( ticker_symbol VARCHAR(4), avg_price DOUBLE); CREATE OR REPLACE PUMP "STREAM_PUMP" AS INSERT INTO "DESTINATION_SQL_STREAM" SELECT STREAM ticker_symbol, AVG(price) AS avg_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), avg_price DOUBLE); CREATE OR REPLACE PUMP "STREAM_PUMP" AS INSERT INTO "DESTINATION_SQL_STREAM" SELECT STREAM ticker_symbol, AVG(price) AS avg_price FROM "SOURCE_SQL_STREAM_001" GROUP BY ticker_symbol, FLOOR("SOURCE_SQL_STREAM_001".ROWTIME TO MINUTE);
结果
上一示例输出的流与以下内容类似。
![Table showing stock ticker symbols NFS, WAS, PPL, ALY with corresponding dates and average prices.](images/sql-reference-avg-example-1.png)
示例 2:使用 OVER 子句返回平均值
在此示例中,该OVER
子句将分区流中的记录除以前 '1' 小时的时间范围间隔。随后,从 AVG
子句返回的行计算 OVER
函数。
CREATE OR REPLACE STREAM "DESTINATION_SQL_STREAM" ( ticker_symbol VARCHAR(4), avg_price DOUBLE); CREATE OR REPLACE PUMP "STREAM_PUMP" AS INSERT INTO "DESTINATION_SQL_STREAM" SELECT STREAM ticker_symbol, AVG(price) OVER ( PARTITION BY ticker_symbol RANGE INTERVAL '1' HOUR PRECEDING) AS avg_price FROM "SOURCE_SQL_STREAM_001"
上一示例输出的流与以下内容类似。
![Table showing stock data with columns for timestamp, ticker symbol, and average price.](images/sql-reference-avg-example-2.png)
使用说明
Amazon Kinesis Analytics 不支持AVG
应用于间隔类型。此功能偏离了 SQL:2008 标准。
当用作分析函数时,如果正在评估的窗口不包含任何行,或者如果所有行都包含空值,则AVG
返回 null。有关更多信息,请参阅分析函数:对于窗口内与输入行匹配的分区不包含任何行或所有行均为空的PARTITION BY
子句,AVG 还会返回 null。有关 PARTITION BY
的更多信息,请参阅 WINDOW 子句 (滑动窗口)。
AVG
忽略一组值或数值表达式中的空值。例如,以下各项返回值 2:
AVG(1, 2, 3) = 2
AVG(1,null, 2, null, 3, null) = 2