AVG [analytic]

计算 窗口内一组中表达式的平均值。 AVG 返回与表达式的数字数据类型相同的数据类型。

AVG 分析函数不同于 AVG 聚合函数,后者计算一组行中表达式的平均值。

行为类型

不可变

语法

AVG ( expression ) OVER (
    [ window-partition-clause ]
    [ window-order-clause ]
    [ window-frame-clause ] )

参数

表达式
可以隐式转换为数字数据类型的任何数据。
OVER()
请参阅分析函数

溢出处理

默认情况下,当您对数值数据类型调用此函数时,Vertica 允许静默数值溢出。有关此行为以及如何更改它的更多信息,请参阅SUM、SUM_FLOAT 和 AVG 的数字数据类型溢出

示例

以下查询查找该日历月的销售,并使用默认的 RANGE UNBOUNDED PRECEDING AND CURRENT ROW 窗口返回一个运行/累计平均值(有时称为移动平均值):

=> SELECT calendar_month_number_in_year Mo, SUM(product_price) Sales,
   AVG(SUM(product_price)) OVER (ORDER BY calendar_month_number_in_year)::INTEGER Average
   FROM product_dimension pd, date_dimension dm, inventory_fact if
   WHERE dm.date_key = if.date_key AND pd.product_key = if.product_key GROUP BY Mo;
 Mo |  Sales   | Average
----+----------+----------
  1 | 23869547 | 23869547
  2 | 19604661 | 21737104
  3 | 22877913 | 22117374
  4 | 22901263 | 22313346
  5 | 23670676 | 22584812
  6 | 22507600 | 22571943
  7 | 21514089 | 22420821
  8 | 24860684 | 22725804
  9 | 21687795 | 22610470
 10 | 23648921 | 22714315
 11 | 21115910 | 22569005
 12 | 24708317 | 22747281
(12 rows)

要返回不是运行(累计)平均值的移动平均值,该窗口应指定 ROWS BETWEEN 2 PRECEDING AND 2 FOLLOWING

=> SELECT calendar_month_number_in_year Mo, SUM(product_price) Sales,
   AVG(SUM(product_price)) OVER (ORDER BY calendar_month_number_in_year
     ROWS BETWEEN 2 PRECEDING AND 2 FOLLOWING)::INTEGER Average
   FROM product_dimension pd, date_dimension dm, inventory_fact if
   WHERE dm.date_key = if.date_key AND pd.product_key = if.product_key GROUP BY Mo;
 Mo |  Sales   | Average
----+----------+----------
  1 | 23869547 | 22117374
  2 | 19604661 | 22313346
  3 | 22877913 | 22584812
  4 | 22901263 | 22312423
  5 | 23670676 | 22694308
  6 | 22507600 | 23090862
  7 | 21514089 | 22848169
  8 | 24860684 | 22843818
  9 | 21687795 | 22565480
 10 | 23648921 | 23204325
 11 | 21115910 | 22790236
 12 | 24708317 | 23157716
(12 rows)

另请参阅