Delen via


try_sum statistische functie

Van toepassing op:vinkje als ja aan Databricks SQL vinkje als ja aan Databricks Runtime 11.3 LTS en hoger

Retourneert de som die wordt berekend op basis van values 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 window-functie met behulp van de OVER clausule.

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 dit een integraal getaltype is, is een BIGINT.

Als expr het DECIMAL(p, s) resultaat is DECIMAL(p + min(10, 31-p), s).

Als expr dit een interval is, komt het resultaattype overeen expr.

Anders een DUBBELE.

Als DISTINCT wordt opgegeven, worden alleen unieke values opgeteld.

Als het resultaat overloopt, retourneert Databricks SQL NULL. Als u een fout wilt retourneren, gebruikt u in plaats daarvan som.

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