聚集函数
聚合函数(也称为集合函数 )接收每个参数的一组值(例如一列的值),并返回一组输入值的单值结果。 某些规则适用于所有聚合函数。
以下信息适用于所有聚合函数,但COUNT(*)和COUNT_BIG(*)、COUNT和COUNT_BIG函数的变体以及XMLAGG函数除外。
聚合函数的参数是从表达式中得出的值集。 表达式中不能包含其他聚合函数或标量全选。 如GROUP BY子句信息中所述,该集合的范围是一个分组或中间结果表。
如果在查询中指定了GROUP BY子句,且FROM、WHERE、GROUP BY和HAVING子句的中间结果为空集,则不应用聚合函数,查询结果为空集。
如果查询中没有指定GROUP BY子句,且FROM、WHERE和HAVING子句的中间结果表为空集,则聚合函数将应用于空集。
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的描述中所述,当函数应用于空集时,结果为空值。 然而,当函数在外部选择列表中指定,参数由算术表达式给出,并且表达式的任何计算都会导致算术异常(例如除以零)时,结果也是空值。
如果聚合函数的参数值是来自带有字段过程的列的字符串,则函数将应用于编码后的值,并且函数的计算结果将继承字段过程。