try_sum
funkcja agregacji
Dotyczy: Databricks SQL Databricks Runtime 11.3 LTS i nowsze
Zwraca sumę obliczoną na podstawie wartości grupy lub null, jeśli występuje przepełnienie.
Składnia
try_sum ( [ALL | DISTINCT] expr ) [FILTER ( WHERE cond ) ]
Tę funkcję można również wywołać jako funkcję okna przy użyciu klauzuli OVER
.
Argumenty
expr
: wyrażenie, które daje w wyniku wartość liczbową lub interwałową.cond
: opcjonalne wyrażenie logiczne filtrujące wiersze używane do agregacji.
Zwraca
Jeśli expr
jest typem liczb całkowitych, BIGINT.
Jeśli expr
wynik to DECIMAL(p, s)
DECIMAL(p + min(10, 31-p), s)
.
Jeśli expr
parametr jest interwałem, typ wyniku jest zgodny z expr
parametrem .
W przeciwnym razie podwójne.
Jeśli DISTINCT
określono tylko unikatowe wartości, są sumowane.
Jeśli wynik przepełni typ wyniku, usługa SQL usługi Databricks zwróci wartość NULL. Aby zamiast tego zwrócić błąd, użyj sumy.
Przykłady
> 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