مشاركة عبر


sum الدالة التجميعية

ينطبق على: وضع علامة Databricks SQL وضع علامة Databricks Runtime

إرجاع المجموع المحسوب من قيم مجموعة.

بناء الجملة

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

يمكن أيضا استدعاء هذه الدالة كدالة نافذة باستخدام العبارة OVER .

الوسيطات

  • expr: تعبير يتم تقييمه إلى رقم أو فاصل زمني.
  • cond: تعبير منطقي اختياري يقوم بتصفية الصفوف المستخدمة للتجميع.

المرتجعات

إذا كان expr نوع رقم لا يتجزأ، فقم ب BIGINT. إذا كانت expr النتيجة هي DECIMAL(p + min(10, 31-p), s).DECIMAL(p, s) إذا كان expr فاصلا زمنيا، يتطابق نوع النتيجة مع expr.

وإلا، فإن DOUBLE.

إذا DISTINCT تم تحديد قيم فريدة فقط يتم تلخيصها.

إذا تجاوزت النتيجة نوع النتيجة Databricks SQL يثير خطأ ARITHMETIC_OVERFLOW . لإرجاع بدلا NULL من ذلك استخدم try_sum.

تحذير

في Databricks Runtime، إذا كان spark.sql.ansi.enabled هو false، فإن تجاوز السعة BIGINT لا يسبب خطأ ولكنه "يلتف" النتيجة بدلا من ذلك.

الأمثلة

> 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