sum toplama işlevi

Şunun için geçerlidir:evet olarak işaretlendi Databricks SQL evet olarak işaretlendi Databricks Runtime

Bir grubun değerlerinden hesaplanan toplamı döndürür.

Sözdizimi

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

Bu işlev yan tümcesi kullanılarak OVER olarak da çağrılabilir.

Argümanlar

  • expr: Sayısal veya aralık olarak değerlendirilen ifade.
  • cond: Toplama için kullanılan satırları filtreleyerek isteğe bağlı bir Boole ifadesi.

İadeler

expr tam sayı türündeyse, bir BIGINT. Eğer exprDECIMAL(p, s) ise sonuç DECIMAL(p + min(10, 31-p), s) olur. Bir aralıksa expr sonuç türü ile eşleşir expr. Eğer expr DECFLOAT ise, sonuç 'dir.DECFLOAT(34)

Aksi takdirde, bir DOUBLE.

DISTINCT belirtilirse yalnızca benzersiz değerler toplanır.

DECFLOAT girdilerinde, varsayılan yuvarlama modunda, taşma hata yerine sonsuzluk üretir.

Diğer girdi türleri için, sonuç sonuç türünü aşarsa, Azure Databricks ARITHMETIC_OVERFLOW hatası oluşturur. Yerine a NULL döndürmek için try_sum kullanın.

Uyarı

Databricks Runtime'da spark.sql.ansi.enabled etkinleştirilmiş durumdaysa ve false değerinde bir taşma durumu oluşursa, bu hata oluşturmaz ancak sonucun değerini sarar.

Yaygın hata koşulları

Örnekler

> 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