聚集函数

聚合函数(也称为集合函数 )接收每个参数的一组值(例如一列的值),并返回一组输入值的单值结果。 某些规则适用于所有聚合函数。

以下信息适用于所有聚合函数,但COUNT(*)和COUNT_BIG(*)、COUNT和COUNT_BIG函数的变体以及XMLAGG函数除外。

聚合函数的参数是从表达式中得出的值集。 表达式中不能包含其他聚合函数或标量全选。 如GROUP BY子句信息中所述,该集合的范围是一个分组或中间结果表。

如果在查询中指定了GROUP BY子句,且FROM、WHERE、GROUP BY和HAVING子句的中间结果为空集,则不应用聚合函数,查询结果为空集。

如果查询中没有指定GROUP BY子句,且FROM、WHERE和HAVING子句的中间结果表为空集,则聚合函数将应用于空集。

例如,以下SELECT语句的结果是部门中员工JOB的不同值的数量 D11:
   SELECT COUNT(DISTINCT JOB)
     FROM DSN8C10.EMP
     WHERE WORKDEPT = 'D11';

关键词DISTINCT不是函数的参数,而是函数应用前执行的操作说明。 如果指定了“DISTINCT”,则在应用列掩码之前,会删除冗余重复值。 如果带有DISTINCT关键字的聚合函数中的列具有列掩码定义,且该定义引用了非分组列以及非DISTINCT操作的目标列,则聚合函数的结果可能会有所不同。 Db2 不保证每次执行时从一组重复项中返回的行相同,因此,返回的行中那些非DISTINCT/非分组列中的值每次可能不同。

在XML值之前不能指定DISTINCT。

为了与其他SQL实现兼容,UNIQUE可以作为聚合函数中DISTINCT的同义词。

当对数值相等的十进制浮点值解释DISTINCT子句时,不考虑数值中的有效位数。 例如,十进制浮点数 123.00 与十进制浮点数 123 不同。 查询返回的数字的表示形式可以是任何一种遇到的表示形式(例如, 123.00 或123)。

只有在WHERE子句是HAVING子句的子查询的一部分,且表达式中指定的列名是对分组的相关引用时,才能在该子句中使用聚合函数。 如果表达式包含多个列名,则每个列名必须与同一组相关联。

COUNT和COUNT_BIG函数的计算结果不能为空值。 正如AVG、MAX、MIN、STDDEV、SUM和VARIANCE的描述中所述,当函数应用于空集时,结果为空值。 然而,当函数在外部选择列表中指定,参数由算术表达式给出,并且表达式的任何计算都会导致算术异常(例如除以零)时,结果也是空值。

如果聚合函数的参数值是来自带有字段过程的列的字符串,则函数将应用于编码后的值,并且函数的计算结果将继承字段过程。