fn:avg
Returns the average of the values in the input sequence $arg, that is, the
sum of the values divided by the number of values.
Signature
fn:avg($arg as xs:anyAtomicType*) as xs:anyAtomicType?Properties
This function is deterministic, context-independent, and focus-independent.
Rules
If $arg is the empty sequence, the empty sequence is returned.
If $arg contains values of type xs:untypedAtomic they are cast
to xs:double.
Duration values must either all be xs:yearMonthDuration values or must all
be xs:dayTimeDuration values. For numeric values, the numeric promotion
rules defined in Arithmetic operators on numeric values are used to promote all values to a single
common type. After these operations, $arg must satisfy the following condition:
There must be a type T such that:
- every item in
$argis an instance of T. - T is one of
xs:double,xs:float,xs:decimal,xs:yearMonthDuration, orxs:dayTimeDuration.
The function returns the average of the values as sum($arg) div
count($arg); but the implementation may use an otherwise equivalent algorithm
that avoids arithmetic overflow.
Error Conditions
A type error is raised [ERRFORG0006] if the input sequence contains items of incompatible types, as described above.
Examples
let $d1 := xs:yearMonthDuration("P20Y")let $d2 := xs:yearMonthDuration("P10M")let $seq3 := (3, 4, 5)The expression fn:avg($seq3) returns 4.0. (The result is of type xs:decimal.)
The expression fn:avg(($d1, $d2)) returns xs:yearMonthDuration("P10Y5M").
fn:avg(($d1, $seq3)) raises a type error [ERRFORG0006].
The expression fn:avg(()) returns ().
The expression fn:avg((xs:float('INF'), xs:float('-INF'))) returns xs:float('NaN').
The expression fn:avg(($seq3, xs:float('NaN'))) returns xs:float('NaN').