Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Se aplica a:
Databricks SQL
Databricks Runtime
Devuelve el valor sum calculado a partir de los valores de un grupo.
Sintaxis
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: 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, DOUBLE.
Si se especifica DISTINCT, solo se suman los valores únicos.
Si el resultado desborda el tipo de resultado, Databricks SQL produce un error ARITHMETIC_OVERFLOW.
Para devolver un valor NULL en su lugar, use try_sum.
Advertencia
En Databricks Runtime, si spark.sql.ansi.enabled es false, un desbordamiento de BIGINT no provoca un error, sino que "ajusta" el resultado.
Ejemplos
> SELECT sum(col) FROM VALUES (5), (10), (15) AS tab(col);
30
> SELECT sum(col) FILTER(WHERE col <15)
FROM VALUES (5), (10), (15) AS tab(col);
15
> SELECT sum(DISTINCT col) FROM VALUES (5), (10), (10), (15) AS tab(col);
30
> SELECT sum(col) FROM VALUES (NULL), (10), (15) AS tab(col);
25
> SELECT 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: ARITHMETIC_OVERFLOW
-- 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