

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

# SUM
<a name="sql-reference-sum"></a>

从窗口式查询返回一组值的和。根据时间或行定义窗口式查询。有关窗口式查询的信息，请参阅[窗口式查询](https://docs.aws.amazon.com/kinesisanalytics/latest/dev/windowed-sql.html)。

在使用 SUM 时，请注意以下事项：
+ 如果您未使用 `OVER` 子句，则 `SUM` 将作为聚合函数进行计算。在这种情况下，聚合查询必须根据将流分组到有限行中的 `ROWTIME` 在单调表达式中包含 [GROUP BY 子句](sql-reference-group-by-clause.md)。否则，组将是无限流，并且查询永远无法完成，也不会输出任何行。有关更多信息，请参阅 [聚合函数](sql-reference-aggregate-functions.md)。
+ 使用 GROUP BY 子句的窗口式查询在滚动窗口中处理行。有关更多信息，请参阅[滚动窗口（使用 GROUP BY 的聚合）](https://docs.aws.amazon.com/kinesisanalytics/latest/dev/tumbling-window-concepts.html)。
+ 如果您使用 `OVER` 子句，则 `SUM` 将作为分析函数进行计算。有关更多信息，请参阅 [分析函数](sql-reference-analytic-functions.md)。
+ 使用 OVER 子句的窗口式查询在滑动窗口中处理行。有关更多信息，请参阅[滑动窗口](https://docs.aws.amazon.com/kinesisanalytics/latest/dev/sliding-window-concepts.html) 

## 语法
<a name="w2aac22b7c46b9"></a>

### 滚动窗口式查询
<a name="w2aac22b7c46b9b2"></a>

```
SUM(number-expression) ... GROUP BY monotonic-expression | time-based-expression
```

### 滑动窗口式查询
<a name="w2aac22b7c46b9b4"></a>

```
SUM([DISTINCT | ALL] number-expression) OVER window-specification
```

## 参数
<a name="w2aac22b7c46c11"></a>

DISTINCT

仅对唯一值进行计数。

ALL

计算所有行。`ALL` 是默认值。

*number-expression*

指定针对聚合中的每一行计算的值表达式。

OVER *window-specification*

划分流中按时间范围间隔或行数分区的记录。窗口规范定义流中记录的划分方式 (按时间范围间隔或行数)。

按*单调*表达式分组 \$1 *time-based-expression*

基于分组表达式的值为记录分组，从而针对在所有列中具有相同值的每组行返回一个摘要行。

## 示例
<a name="sql-reference-sum-examples"></a>

### 示例数据集
<a name="w2aac22b7c46c13b2"></a>

以下示例基于样本股票数据集，后者是 *Amazon Kinesis Analytics 开发人员指南*中的[入门练习](https://docs.aws.amazon.com/kinesisanalytics/latest/dev/get-started-exercise.html)的一部分。要运行每个示例，您需要一个具有样本股票代码输入流的 Amazon Kinesis Analytics 应用程序。要了解如何创建 Analytics 应用程序和配置样本股票代码输入流，请参阅 *Amazon Kinesis Analytics 开发人员指南*中的[入门](https://docs.aws.amazon.com/kinesisanalytics/latest/dev/get-started-exercise.html)。

具有以下架构的示例股票数据集。

```
(ticker_symbol  VARCHAR(4),
sector          VARCHAR(16),
change          REAL,
price           REAL)
```

### 示例 1：使用 GROUP BY 子句返回值的和
<a name="w2aac22b7c46c13b4"></a>

在此示例中，聚合查询在 `ROWTIME` 上有一个 `GROUP BY` 子句，可将流分组到有限行中。随后，从 `SUM` 子句返回的行计算 `GROUP BY` 函数。

#### 使用 STEP（推荐）
<a name="sql-reference-sum-example-step"></a>

```
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
<a name="sql-reference-sum-example-floor"></a>

```
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);
```

#### 结果
<a name="sql-reference-sum-example-results"></a>

上一示例输出的流与以下内容类似。

![\[Table showing data stream with timestamp, ticker symbol, and sum price columns.\]](http://docs.aws.amazon.com/zh_cn/kinesisanalytics/latest/sqlref/images/sql-reference-sum-example-1.png)


## 使用说明
<a name="w2aac22b7c46c15"></a>

Amazon Kinesis Analytics 不支持应用于间隔类型的 `SUM`。此功能偏离了 SQL:2008 标准。

`SUM` 会忽略来自值集或数字表达式的 null 值。例如，以下各项返回值 6：
+ AVG(1, 2, 3) = 6
+ SUM(1,null, 2, null, 3, null) = 6

## 相关主题
<a name="w2aac22b7c46c17"></a>
+ [窗口式查询](https://docs.aws.amazon.com/kinesisanalytics/latest/dev/windowed-sql.html)
+ [聚合函数](sql-reference-aggregate-functions.md)
+ [GROUP BY 子句](sql-reference-group-by-clause.md)
+ [分析函数](sql-reference-analytic-functions.md)
+ [入门练习](https://docs.aws.amazon.com/kinesisanalytics/latest/dev/get-started-exercise.html)
+ [WINDOW 子句 (滑动窗口)](sql-reference-window-clause.md)