avg
(función de agregado)
Se aplica a: Databricks SQL Databricks Runtime
Devuelve la media calculada de los valores de un grupo. Esta función es un sinónimo para la función de agregado mean.
Sintaxis
avg( [ALL | DISTINCT] expr) [FILTER ( WHERE cond ) ]
Esta función también se puede invocar como una función de ventana mediante la cláusula OVER
.
Argumentos
expr
: expresión que se evalúa como un valor numérico o intervalo.cond
: una expresión booleana opcional que filtra las filas usadas para la agregación.
Devoluciones
El tipo de resultado se calcula como para los argumentos:
DECIMAL(p, s)
: el tipo de resultado esDECIMAL(p + 4, s + 4)
. Si se alcanza la precisión máxima de DECIMAL, el aumento de escala se limitará para evitar la pérdida de dígitos significativos.- Intervalo de año-mes: el resultado es un valor
INTERVAL YEAR TO MONTH
. - Intervalo de día-hora: el resultado es un valor
INTERVAL DAY TO SECOND
. - En todos los demás casos, el resultado es un valor DOUBLE.
Los valores NULL dentro del grupo se omiten. Si un grupo está vacío o solo consta de valores NULL, el resultado es NULL.
Si se especifica DISTINCT
, la media se calcula después de quitar los duplicados.
Si el resultado desborda el tipo de resultado, Azure Databricks produce un error ARITHMETIC_OVERFLOW. Para devolver un valor NULL, use try_avg.
Advertencia
En Databricks Runtime, si spark.sql.ansi.enabled es false
, un desbordamiento devuelve NULL
en lugar de un error.
Ejemplos
> SELECT avg(col) FROM VALUES (1), (2), (3) AS tab(col);
2.0
> SELECT avg(DISTINCT col) FROM VALUES (1), (1), (2) AS tab(col);
1.5
> SELECT avg(col) FROM VALUES (1), (2), (NULL) AS tab(col);
1.5
> SELECT avg(col) FROM VALUES (INTERVAL '1' YEAR), (INTERVAL '2' YEAR) AS tab(col);
1-6
-- Overflow results in NULL for try_avg()
> SELECT try_avg(col) FROM VALUES (5e37::DECIMAL(38, 0)), (5e37::DECIMAL(38, 0)) AS tab(col);
NULL
-- Overflow causes error for avg() in ANSI mode.
> SELECT avg(col) FROM VALUES (5e37::DECIMAL(38, 0)), (5e37::DECIMAL(38, 0)) AS tab(col);
Error: CANNOT_CHANGE_DECIMAL_PRECISION