AVG 窗口函数
AVG 窗口函数返回输入表达式值的平均值(算术平均值)。AVG 函数使用数值并忽略 NULL 值。
语法
AVG ( [ALL ] expression ) OVER ( [ PARTITION BY expr_list ] [ ORDER BY order_list frame_clause ] )
参数
- expression
-
对其执行函数的目标列或表达式。
- ALL
-
利用参数 ALL,该函数可保留表达式中的所有重复值以进行计数。ALL 是默认值。DISTINCT 不受支持。
- OVER
-
指定聚合函数的窗口子句。OVER 子句将窗口聚合函数与普通集合聚合函数区分开来。
- PARTITION BY expr_list
-
依据一个或多个表达式定义 AVG 函数的窗口。
- ORDER BY order_list
-
对每个分区中的行进行排序。如果未指定 PARTITION BY,则 ORDER BY 使用整个表。
- frame_clause
-
如果 ORDER BY 子句用于聚合函数,则需要显式框架子句。框架子句优化函数窗口中的行集,包含或排除已排序结果中的行集。框架子句包括 ROWS 关键字和关联的说明符。请参阅 窗口函数语法摘要。
数据类型
AVG 函数支持的参数类型为 SMALLINT、INTEGER、BIGINT、NUMERIC、DECIMAL、REAL 和 DOUBLE PRECISION。
AVG 函数支持的返回类型为:
-
适用于 SMALLINT 或 INTEGER 参数的 BIGINT
-
适用于 BIGINT 参数的 NUMERIC
-
适用于浮点参数的 DOUBLE PRECISION
示例
以下示例按日期计算销量的移动平均数;按日期 ID 和销售 ID 对结果进行排序:
select salesid, dateid, sellerid, qty, avg(qty) over (order by dateid, salesid rows unbounded preceding) as avg from winsales order by 2,1; salesid | dateid | sellerid | qty | avg ---------+------------+----------+-----+----- 30001 | 2003-08-02 | 3 | 10 | 10 10001 | 2003-12-24 | 1 | 10 | 10 10005 | 2003-12-24 | 1 | 30 | 16 40001 | 2004-01-09 | 4 | 40 | 22 10006 | 2004-01-18 | 1 | 10 | 20 20001 | 2004-02-12 | 2 | 20 | 20 40005 | 2004-02-12 | 4 | 10 | 18 20002 | 2004-02-16 | 2 | 20 | 18 30003 | 2004-04-18 | 3 | 15 | 18 30004 | 2004-04-18 | 3 | 20 | 18 30007 | 2004-09-07 | 3 | 30 | 19 (11 rows)
有关 WINSALES 表的说明,请参阅窗口函数示例的示例表。