try_sum
(función de agregado)
Se aplica a Databricks SQL Databricks Runtime 11.3 LTS y versiones posteriores
Devuelve la suma calculada a partir de valores de un grupo, o NULL si hay un desbordamiento.
Sintaxis
try_sum ( [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
Si expr
es un tipo de número entero, se devuelve un valor BIGINT.
Si expr
es DECIMAL(p, s)
, el resultado es DECIMAL(p + min(10, 31-p), s)
.
Si es expr
un intervalo, el tipo de resultado coincide con expr
.
De lo contrario, se devuelve un valor DOUBLE.
Si se especifica DISTINCT
, solo se suman los valores únicos.
Si el resultado desborda el tipo de resultado, Databricks SQL devuelve NULL. Para devolver un error, use sum.
Ejemplos
> SELECT try_sum(col) FROM VALUES (5), (10), (15) AS tab(col);
30
> SELECT try_sum(col) FILTER(WHERE col <15)
FROM VALUES (5), (10), (15) AS tab(col);
15
> SELECT try_sum(DISTINCT col) FROM VALUES (5), (10), (10), (15) AS tab(col);
30
> SELECT try_sum(col) FROM VALUES (NULL), (10), (15) AS tab(col);
25
> SELECT try_sum(col) FROM VALUES (NULL), (NULL) AS tab(col);
NULL
-- try_sum overflows a BIGINT
> SELECT try_sum(c1) FROM VALUES(5E18::BIGINT), (5E18::BIGINT) AS tab(c1);
NULL
-- In ANSI mode sum returns an error if it overflows BIGINT
> SELECT sum(c1) FROM VALUES(5E18::BIGINT), (5E18::BIGINT) AS tab(c1);
ERROR
-- try_sum overflows an INTERVAL
> SELECT try_sum(c1) FROM VALUES(INTERVAL '100000000' YEARS), (INTERVAL '100000000' YEARS) AS tab(c1);
NULL
-- sum returns an error on INTERVAL overflow
> SELECT sum(c1) FROM VALUES(INTERVAL '100000000' YEARS), (INTERVAL '100000000' YEARS) AS tab(c1);
Error: ARITHMETIC_OVERFLOW