AVG is an aggregate function that evaluates the average of an expression over a set of rows. AVG is allowed only on expressions that evaluate to numeric data types.

AVG ( [ DISTINCT | ALL ]Expression)

The DISTINCT qualifier eliminates duplicates. The ALL qualifier retains duplicates. ALL is the default value if neither ALL nor DISTINCT is specified. For example, if a column contains the values 1.0, 1.0, 1.0, 1.0, and 2.0, AVG(col) returns a smaller value than AVG(DISTINCT col).

Only one DISTINCT aggregate expression per
*SelectExpression* is allowed. For
example, the following query is not valid:

SELECT AVG (DISTINCT flying_time), SUM (DISTINCT miles) FROM Flights

The expression can contain multiple column references or expressions, but it cannot contain another aggregate or subquery. It must evaluate to an SQL-92 numeric data type. You can therefore call methods that evaluate to SQL-92 data types. If an expression evaluates to NULL, the aggregate skips that value.

The resulting data type is the same as the expression on which it
operates (it will never overflow). The following query, for example, returns
the INTEGER
*1*, which might not be what you would expect:

SELECT AVG(c1) FROM (VALUES (1), (1), (1), (1), (2)) AS myTable (c1)

CAST the expression to another data type if you want more precision:

SELECT AVG(CAST (c1 AS DOUBLE PRECISION)) FROM (VALUES (1), (1), (1), (1), (2)) AS myTable (c1)