Delen via


sum statistische functie

Van toepassing op:vinkje als ja aan Databricks SQL vinkje als ja aan Databricks Runtime

Retourneert de som die wordt berekend op basis van de waarden van een groep.

Syntaxis

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

Deze functie kan ook worden aangeroepen als een vensterfunctie 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, 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 DOUBLE.

Als DISTINCT is opgegeven, worden alleen unieke waarden opgeteld.

Als het resultaat overloopt, genereert Databricks SQL een ARITHMETIC_OVERFLOW-fout . Als u een in plaats daarvan wilt NULL retourneren, gebruikt u try_sum.

Waarschuwing

Als in Databricks Runtime spark.sql.ansi.enabledveroorzaakt een overloop false geen fout, maar 'verpakt' het resultaat.

Voorbeelden

> SELECT sum(col) FROM VALUES (5), (10), (15) AS tab(col);
 30

> SELECT sum(col) FILTER(WHERE col <15)
    FROM VALUES (5), (10), (15) AS tab(col);
 15

> SELECT sum(DISTINCT col) FROM VALUES (5), (10), (10), (15) AS tab(col);
 30

> SELECT sum(col) FROM VALUES (NULL), (10), (15) AS tab(col);
 25

> SELECT 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: ARITHMETIC_OVERFLOW

-- 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