try_avg
(función de agregado)
Se aplica a: Databricks SQL 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 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 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