Compartir a través de


try_avg (función de agregado)

Se aplica a:casilla marcada como sí Databricks SQL casilla marcada como Sí Databricks Runtime 11.3 LTS y versiones posteriores

Devuelve la media calculada de los valores de un grupo. Si hay un desbordamiento, devuelve NULL.

Sintaxis

try_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 devuelve un valor numérico o de 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 YEAR 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.

Para generar un error en lugar de NULL en caso de que se produzca un desbordamiento, use avg.

Ejemplos

> SELECT try_avg(col) FROM VALUES (1), (2), (3) AS tab(col);
 2.0

> SELECT try_avg(DISTINCT col) FROM VALUES (1), (1), (2) AS tab(col);
 1.5

> SELECT try_avg(col) FROM VALUES (1), (2), (NULL) AS tab(col);
 1.5

> SELECT try_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