avg (función de agregado)

Se aplica a:casilla marcada como Sí Databricks SQL casilla marcada como Sí 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 es DECIMAL(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