Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunun için geçerlidir:
Databricks SQL
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