AVG 聚集函数
AVG 函数返回一组数字的平均值。
该模式是 SYSIBM。
- expression
- 返回一组内置数字 或布尔值 的表达式。 AVG 函数将忽略输入表达式可能包含的任何空值。
- 全部或 DISTINCT
- 如果指定了 ALL ,那么将使用表达式返回的所有值 (包括重复值) 来计算平均值 (这是缺省值)。 如果指定了 DISTINCT ,那么将忽略重复的值。 数字上相等的十进制浮点值被视为重复值,即使它们具有不同数量的有效数字也是如此。 例如,如果表达式返回的值集包括十进制浮点数 123 , 123.0和 123.00,那么仅使用其中一个值来计算平均值。
结果
结果的数据类型与输入表达式的数据类型相同,但有以下例外:
- 如果输入表达式的数据类型为 SMALLINT ,那么结果的数据类型为 INTEGER。
- 如果输入表达式的数据类型为 BOOLEAN ,那么结果的数据类型为 BIGINT。 仅当输入表达式返回的所有值也为 1 时,结果才为 1; 否则,结果为 0。
- 如果输入表达式的数据类型为单精度浮点 (REAL) ,那么结果的数据类型为双精度浮点 (DOUBLE)。
- 如果输入表达式的数据类型为 DECFLOAT (n) ,那么结果的数据类型为 DECFLOAT (34)。
- 如果输入表达式是精度为 p 且小数位为 s的 DECIMAL 值,那么结果是精度为 DECIMAL 且小数位为如下所示:
表 1. 具有 DECIMAL 输入的 AVG 聚集函数的结果精度和小数位 DECIMAL 算术方式 1 p 结果精度 结果标度 缺省值 不适用 31 31-p+sDEC15 <=15 15 15-p+sDEC15 >15 31 MAX(0,28-p+s)DEC31 不适用 31 MAX(0,28-p+s)注:- 这些方式由 dec_arithmetic 配置参数确定。
如果结果的数据类型为 SMALLINT , INTEGER 或 BIGINT ,那么将截断平均值的小数部分。 未向上舍入。
在求值期间,未定义将输入值一起添加的顺序,但每个中间结果都必须在结果的数据类型范围内。
结果可以为空值。 如果函数应用于空集合,那么结果为空值; 否则,结果为集合的平均值。
示例
- 示例 1: 使用 PROJECT 表,将主变量 AVERAGE (decimal (5, 2)) 设置为部门 (DEPTNO) "D11" 中项目的平均人员配置级别 (PRSTAFF)。
SELECT AVG(PRSTAFF) INTO :AVERAGE FROM PROJECT WHERE DEPTNO = 'D11'导致在使用样本表时将 AVERAGE 设置为 4.25 (即 17/ 4)。
- 示例 2: 使用 PROJECT 表,将主变量 ANY_CALC (十进制 (5, 2)) 设置为部门 (DEPTNO) "D11" 中项目的每个唯一人员配置级别值 (PRSTAFF) 的平均值。
SELECT AVG(DISTINCT PRSTAFF) INTO :ANY_CALC FROM PROJECT WHERE DEPTNO = 'D11'使用样本表时,将 ANY_CALC 设置为 4.66 (即 14/ 3)。
