AVG 聚集函数

AVG 函数返回一组数字的平均值。

Read syntax diagramSkip visual syntax diagramAVG(ALLDISTINCTexpression)

该模式是 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+s
    DEC15 <=15 15 15-p+s
    DEC15 >15 31 MAX(0,28-p+s)
    DEC31 不适用 31 MAX(0,28-p+s)
    注:
    1. 这些方式由 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)。