Freigeben über


try_sum Aggregatfunktion

Gilt für:Grünes Häkchen für „Ja“ Databricks SQL Grünes Häkchen für „Ja“ Databricks Runtime 11.3 LTS und höher

Gibt die Summe, die aus Werten einer Gruppe berechnet wurde, oder NULL zurück, wenn ein Überlauf auftritt.

Syntax

try_sum ( [ALL | DISTINCT] expr ) [FILTER ( WHERE cond ) ]

Diese Funktion kann auch als window function mithilfe der OVER-Klausel aufgerufen werden.

Argumente

  • expr: Ein Ausdruck, der in einen numerischen Wert oder in ein Intervall ausgewertet wird.
  • cond: Ein optionaler boolescher Ausdruck, der die für die Aggregation verwendeten Zeilen filtert.

Rückgabe

Wenn expr ein integraler Zahlentyp ist, ein BIGINT-Typ.

Wenn exprDECIMAL(p, s) ist, dann ist das Ergebnis DECIMAL(p + min(10, 31-p), s).

Wenn expr ein Intervall ist, stimmt der Ergebnistyp mit expr überein.

Andernfalls ein DOUBLE-Wert.

Wenn DISTINCT angegeben wird, werden nur eindeutige Werte addiert.

Wenn das Ergebnis den Ergebnistyp überläuft, gibt Databricks SQL NULL zurück. Um einen Fehler zurückzugeben, verwenden Sie stattdessen sum.

Beispiele

> 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