Bagikan melalui


try_sumFungsi agregat

Berlaku untuk:centang ditandai ya Databricks SQL centang ditandai ya Databricks Runtime 11.3 LTS ke atas

Mengembalikan jumlah yang dihitung dari nilai grup, atau NULL jika ada luapan.

Sintaks

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

Fungsi ini juga dapat dipanggil sebagai fungsi jendela menggunakan OVER klausa.

Argumen

  • expr: Ekspresi yang mengevaluasi ke numerik atau interval.
  • cond: Ekspresi boolean opsional yang memfilter baris yang digunakan untuk agregasi.

Mengembalikan

Jika expr adalah jenis integral, maka BIGINT.

Jika expr adalah DECIMAL(p, s), maka hasilnya adalah DECIMAL(p + min(10, 31-p), s).

Jika expr adalah interval, jenis hasil cocok dengan expr.

Jika tidak, GANDA.

Jika DISTINCT ditentukan, hanya nilai unik yang dijumlahkan.

Jika hasilnya meluap, jenis hasil Databricks SQL akan mengembalikan NULL. Untuk mengembalikan kesalahan, gunakan jumlah.

Contoh

> 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