# 聚合函数

被称为聚合函数的函数家族包含将多个字段值作为其输入信息并每个组返回单个结果的函数，在此类函数中，分组通过图表维度或脚本语句中的 group by 子句定义。

聚合函数包括 Sum()、Count()、Min()、Max() 等更多函数。

大多数聚合函数均可在数据加载脚本和图表表达式中使用，但语法不同。

## 在数据加载脚本中使用聚合函数

聚合函数只能在 LOAD 和 SELECT 语句内使用。

## 在图表表达式中使用聚合函数

聚合函数的参数不能包含其他聚合函数，除非这些内部聚合包含 TOTAL 限定符。 有关高级嵌套聚合的更多信息，请结合指定维度使用高级函数 Aggr。

聚合函数会聚合选择项定义的可能记录集合。但替代记录集合可使用集合分析中的集合表达式定义。

[1](https://help.qlik.com/zh-CN/qlikview/September2026/Subsystems/Client/Content/QV_QlikView/ChartFunctions/SetAnalysis/set-analysis-expressions.htm)

## 如何计算聚合

聚合在特定表的记录上循环，聚合其中的记录。例如，计数(&lt;Field&gt;) 将计算 &lt;Field&gt; 所在的表格中记录的数目。如果只想聚合不同字段值，则需要使用 distinct 子句，例如 Count(distinct &lt;Field&gt;)。

如果聚合函数包含来自不同表的字段，则聚合函数将循环遍历组成字段的表的交叉乘积记录。这会降低性能，因此应该避免此类聚合，尤其在您有大量数据时是这样。

## 关键字段聚合

聚合的计算方式意味着您不能聚合关键字段，因为不清楚应该使用哪个表进行聚合。例如，如果字段 &lt;Key&gt; 链接两个表，则不清楚Count(&lt;Key&gt;) 是否应返回第一个表或第二个表中的记录数。

但是，如果使用 distinct 子句，则聚合定义良好，可以为跨两个表链接的关键字段计算。

如果在聚合函数中使用关键字段而不使用 distinct 子句，则 QlikView 将返回一个可能毫无意义的数字。解决方案是要么使用 distinct 子句，要么使用关键字段的副本 — 一个只驻留在一个表中的副本。

例如，在下表中，ProductID 是表之间的键。

ProductId 和 Products 表之间的 Details 键

ProductId 和 Products 表之间的 Details 键

ProductIdProductId 和 ProductsProducts 表之间的 DetailsDetails 键 ![由键字段“ProductID”链接的两个表](https://help.qlik.com/zh-CN/qlikview/September2026/Subsystems/Client/Content/Resources/Images/AggTables.png)

Count(ProductID) 可以在 Products 表中计数（每个产品只有一条记录 – ProductID 是主键），也可以在 Details 表中计数（每个产品很可能有多条记录）。如果要计算不同产品的数量，应该使用 Count(distinct ProductID)。如果要计算特定表中的行数，则不应使用键。

### 包含在三个或多个表中的关键字段的聚合

distinct 前缀仅适用于最多链接两个表的关键字段。当对存在于三个或多个表中的关键字段进行聚合分组时，任何需要字段的频率信息的操作都将返回 NULL。如果关键字段链接三个或多个表，则必须改为使用该字段的非关键副本。