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