Megosztás a következőn keresztül:


try_sum összesítő függvény

A következőkre vonatkozik:jelölje be az igennel jelölt jelölőnégyzetet Databricks SQL jelölje be az igennel jelölt jelölőnégyzetet Databricks Runtime 11.3 LTS és újabb

Egy csoport értékeiből kiszámított összeget, vagy túlcsordulás esetén NULL értéket ad vissza.

Syntax

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

Ez a függvény ablakfüggvényként is meghívható a OVER záradék használatával.

Argumentumok

  • expr: Numerikus vagy intervallumértékre kiértékelt kifejezés.
  • cond: Nem kötelező logikai kifejezés, amely az összesítéshez használt sorokat szűri.

Válaszok

Ha expr egy integrál számtípus, akkor BIGINT.

Ha expr az DECIMAL(p, s) eredmény .DECIMAL(p + min(10, 31-p), s)

Ha expr intervallum, akkor az eredménytípus megegyezik expr.

Ellenkező esetben dupla.

Ha DISTINCT meg van adva, csak az egyedi értékek lesznek összegezve.

Ha az eredmény túlcsordul, a Databricks SQL eredménytípus null értéket ad vissza. Ha hibát szeretne visszaadni, használja az összegzést.

Példák

> 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