AVG¶
返回非 NULL 记录的平均值。如果组内的所有记录都是 NULL,则函数返回 NULL。
语法¶
聚合函数
AVG( [ DISTINCT ] <expr1> )
窗口函数
AVG( [ DISTINCT ] <expr1> ) OVER (
[ PARTITION BY <expr2> ]
[ ORDER BY <expr3> [ ASC | DESC ] [ <window_frame> ] ]
)
有关 window_frame
语法的详细信息,请参阅 窗口函数的语法和用法。
实参¶
expr1
这是一个计算结果为数值数据类型(INTEGER、FLOAT、DECIMAL 等)的表达式。
expr2
这是用于划分分区的可选表达式。
expr3
这是每个分区中作为排序规则的可选表达式。
使用说明¶
传递 VARCHAR 表达式时,此函数会将输入隐式转换为浮点值。如果无法执行转换,则会返回错误。
当此函数作为窗口函数调用,且其中的 OVER 子句包含 ORDER BY 子句时:
需要窗口框架。如果没有明确指定窗口框架,则使用以下默认窗口框架:
RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
有关窗口框架的更多信息(包括语法、使用说明和示例),请参阅 窗口函数的语法和用法。
禁止在窗口函数中使用关键字 DISTINCT,否则会导致编译时错误。
示例¶
设置:
CREATE OR REPLACE TABLE avg_example(int_col int, d decimal(10,5), s1 varchar(10), s2 varchar(10)); INSERT INTO avg_example VALUES (1, 1.1, '1.1','one'), (1, 10, '10','ten'), (2, 2.4, '2.4','two'), (2, NULL, NULL, 'NULL'), (3, NULL, NULL, 'NULL'), (NULL, 9.9, '9.9','nine');
显示数据:
SELECT * FROM avg_example ORDER BY int_col, d; +---------+----------+------+------+ | INT_COL | D | S1 | S2 | |---------+----------+------+------| | 1 | 1.10000 | 1.1 | one | | 1 | 10.00000 | 10 | ten | | 2 | 2.40000 | 2.4 | two | | 2 | NULL | NULL | NULL | | 3 | NULL | NULL | NULL | | NULL | 9.90000 | 9.9 | nine | +---------+----------+------+------+
计算数字列或可以转换为数字的列的平均值:
SELECT AVG(int_col), AVG(d) FROM avg_example; +--------------+---------------+ | AVG(INT_COL) | AVG(D) | |--------------+---------------| | 1.800000 | 5.85000000000 | +--------------+---------------+
将 AVG
与 GROUP BY
结合,计算不同组的平均值:
SELECT int_col, AVG(d), AVG(s1) FROM avg_example GROUP BY int_col ORDER BY int_col; +---------+---------------+---------+ | INT_COL | AVG(D) | AVG(S1) | |---------+---------------+---------| | 1 | 5.55000000000 | 5.55 | | 2 | 2.40000000000 | 2.4 | | 3 | NULL | NULL | | NULL | 9.90000000000 | 9.9 | +---------+---------------+---------+
用作简单的窗口函数:
SELECT int_col, AVG(int_col) OVER(PARTITION BY int_col) FROM avg_example ORDER BY int_col; +---------+-----------------------------------------+ | INT_COL | AVG(INT_COL) OVER(PARTITION BY INT_COL) | |---------+-----------------------------------------| | 1 | 1.000 | | 1 | 1.000 | | 2 | 2.000 | | 2 | 2.000 | | 3 | 3.000 | | NULL | NULL | +---------+-----------------------------------------+