Compartir a través de


try_sum (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 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