Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.
计算一组行、一个数字表达式或一组唯一值的平均值。
AVG( [ ALL | DISTINCT ] numeric-expression )
AVG( [ ALL ] numeric-expression ) OVER ( window-spec )
window-spec : see Syntax 2 instructions in the Remarks section below
[ ALL ] numeric-expression 要对各组中的行计算其平均值的表达式。
DISTINCT 子句 计算各组中的唯一数字值的平均值。
如果组不包含任何行,则返回 NULL 值。
如果参数为 DOUBLE,则返回 DOUBLE;否则返回 NUMERIC。
此平均值不包括 numeric-expression 为 NULL 值的行。
语法 2 表示作为 SELECT 语句中的窗口函数的用法。因此,可以在函数语法中指定 window-spec 的元素(内置),也可以将这些元素与 SELECT 语句中的 WINDOW 子句一并加以指定。请参见WINDOW 子句中提供的 window-spec 定义。
有关在 SELECT 语句中使用窗口函数的详细信息(包括工作示例),请参见窗口函数。
有关在 OVER 子句中指定窗口说明的详细信息,请参见窗口定义:内置使用 OVER 子句和 WINDOW 子句。
该函数可能会产生溢出错误,从而导致返回错误。对 numeric-expression 使用 CAST 函数可避免出现溢出错误。请参见CAST 函数 [Data type conversion]。
SQL/2008 语法 1 是 SQL/2008 标准的核心功能,而语法 2 是可选 SQL/2008 语言功能 T611 "基本 OLAP 操作" 的组成部分。对不是列引用的表达式指定 DISTINCT 的能力是可选 SQL 语言功能 F561 "全值表达式" 的组成部分。SQL Anywhere 还支持 SQL/2008 语言功能 F441 "扩展集函数支持",允许集合函数的操作数是任意表达式,可能包括对其它查询块中不是列引用的表达式的外部引用。
SQL Anywhere 不支持可选的 SQL/2008 功能 F442 "集函数中的混合列引用"。SQL Anywhere 不允许集合函数参数既含有来自包含 AVG 函数的查询块的列引用,又含有外部引用。请参见集合函数和外部引用。
以下语句返回值 49988.623200。
SELECT AVG( Salary ) FROM Employees;
以下语句返回 Products 表中的平均产品价格:
SELECT AVG( DISTINCT UnitPrice ) FROM Products;
以下语句返回错误 SQLSTATE 42W68,因为 AVG 的参数包含子查询中的限定表达式和外部 SELECT 块中的外部引用 (p.Quantity):
select * from Products as p where p.Quantity > ( select avg( 0.5 * p.Quantity + 0.5 * s.Quantity ) from SalesOrderItems as s where s.ProductID = p.ProductID )