try_sum
statistische functie
Van toepassing op: Databricks SQL
Databricks Runtime 11.3 LTS en hoger
Retourneert de som die wordt berekend op basis van waarden van een groep of NULL als er een overloop is.
Syntaxis
try_sum ( [ALL | DISTINCT] expr ) [FILTER ( WHERE cond ) ]
Deze functie kan ook worden aangeroepen als een vensterfunctie met behulp van de OVER
component.
Argumenten
-
expr
: Een expressie die resulteert in een numerieke waarde of een interval. -
cond
: Een optionele Boole-expressie die de rijen filtert die worden gebruikt voor aggregatie.
Retouren
Als expr
een integraal getaltype is, is het een BIGINT.
Als expr
DECIMAL(p, s)
is, dan is het resultaat DECIMAL(p + min(10, 31-p), s)
.
Als expr
dit een interval is, komt het resultaattype overeen expr
.
Anders een dubbele.
Als DISTINCT
is opgegeven, worden alleen unieke waarden opgeteld.
Als het resultaat het resultaattype overschrijdt, retourneert Databricks SQL NULL. Gebruik som in plaats daarvan om een fout te retourneren.
Voorbeelden
> 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