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
$arg
is 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')
.