Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Se aplica a:
Databricks SQL
Databricks Runtime
Devuelve la media calculada de los valores de un grupo. Esta función es un sinónimo de mean función de agregado.
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 paraDECIMAL, el aumento de la 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
DOUBLE.
Los valores NULL dentro del grupo se omiten. Si un grupo está vacío o solo consta de valores null, el resultado será 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