Skip to content

适用虚谷数据库版本

v12.9



适用虚谷数据库版本

v12.9


AVG

📄字数 1.2K
👁️阅读量 加载中...

功能描述

计算一组数值的平均值。

语法格式

sql
AVG([DISTINCT | ALL ] expr)
  [OVER(analytic_clause)]

输入参数

  • exprFLOATDOUBLENUMERICINTERVAL 类型,或能隐式转换为 FLOATDOUBLENUMERICINTERVAL 类型的其他类型。INTERVAL 类型的详细信息,请参考 时间间隔类型
  • OVER (analytic_clause):可选的分析子句,支持分组子句,排序子句以及范围子句,详情见analytic_clause

输出结果

输出结果类型与输入参数类型一致,若输入参数为 NULL,则输出结果为 NULL

示例

sql
SQL> CREATE TABLE tab_employees (
        employee_id INT IDENTITY(1,1) PRIMARY KEY,
        manager_id INT NOT NULL,
        last_name VARCHAR(50) NOT NULL,
        hire_date DATE NOT NULL,
        salary NUMERIC(10, 2) NOT NULL
    );

SQL> INSERT INTO tab_employees (manager_id, last_name, hire_date, salary) VALUES
    (100, 'De Haan', TO_DATE('2001-01-13', 'YYYY-MM-DD'), 17000),
    (100, 'Raphaely', TO_DATE('2002-12-07', 'YYYY-MM-DD'), 11000),
    (100, 'Kaufling', TO_DATE('2003-05-01', 'YYYY-MM-DD'), 7900),
    (100, 'Hartstein', TO_DATE('2004-02-17', 'YYYY-MM-DD'), 13000),
    (100, 'Weiss', TO_DATE('2004-07-18', 'YYYY-MM-DD'), 8000),
    (100, 'Russell', TO_DATE('2004-10-01', 'YYYY-MM-DD'), 14000);

-- 计算 tab_employees 表中所有员工的平均工资
SQL> SELECT AVG(salary) "AVERAGE" FROM tab_employees;

+---------------+
|    AVERAGE    |
+---------------+
| 11816.6666667 |
+---------------+

-- 计算 tab_employees 表中每个员工的平均工资,这些员工受雇于同一经理,
-- 计算会包含自身及前后各一行,形成一个3 行的滑动窗口
SQL> SELECT manager_id, last_name, hire_date, salary,
         AVG(salary) OVER (
           PARTITION BY manager_id ORDER BY hire_date
           ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING
         ) AS c_mavg
    FROM tab_employees;

+------------+-----------+-------------+--------+---------------+
| MANAGER_ID | LAST_NAME |  HIRE_DATE  | SALARY |    C_MAVG     |
+------------+-----------+-------------+--------+---------------+
| 100        | De Haan   | 2001-01-13  | 17000  | 14000         |
| 100        | Raphaely  | 2002-12-07  | 11000  | 11966.6666667 |
| 100        | Kaufling  | 2003-05-01  | 7900   | 10633.3333333 |
| 100        | Hartstein | 2004-02-17  | 13000  | 9633.3333333  |
| 100        | Weiss     | 2004-07-18  | 8000   | 11666.6666667 |
| 100        | Russell   | 2004-10-01  | 14000  | 11000         |
+------------+-----------+-------------+--------+---------------+