Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för:
Databricks SQL
Databricks Runtime
Returnerar summan som beräknas från värdena för en grupp.
Syntax
sum ( [ALL | DISTINCT] expr ) [FILTER ( WHERE cond ) ]
Den här funktionen kan också anropas som en fönsterfunktion med hjälp av OVER -satsen.
Argument
-
expr: Ett uttryck som utvärderas till ett tal eller ett intervall. -
cond: Ett valfritt booleskt uttryck som filtrerar de rader som används för aggregering.
Återlämningar
Om expr är en integralnummertyp, en BIGINT.
Om expr är DECIMAL(p, s) resultatet är DECIMAL(p + min(10, 31-p), s).
Om expr är ett intervall matchar exprresultattypen .
Annars en DOUBLE.
Om DISTINCT anges summeras endast unika värden.
Om resultatet flödar över genereras ett ARITHMETIC_OVERFLOW fel av datatypen Databricks SQL.
Om du vill returnera en NULL kan du i stället använda try_sum.
Varning
I Databricks Runtime, om spark.sql.ansi.enabled är false, orsakar ett spill av BIGINT inte ett fel utan "omsluter" resultatet i stället.
Exempel
> 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