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

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

إرجاع المجموع المحسوب من قيم مجموعة، أو NULL إذا كان هناك تجاوز.

بناء الجملة

try_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 بإرجاع NULL. لإرجاع خطأ بدلا من ذلك استخدم المجموع.

الأمثلة

> 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