try_avg toplama işlevi

Şunlar için geçerlidir:onay işareti evet olarak işaretlenmiş Databricks SQL onay işareti evet olarak işaretlenmiş Databricks Runtime 11.3 LTS ve üzeri

Bir grubun değerlerinden hesaplanan ortalamayı döndürür. Taşma durumu mevcutsa NULL döndürür.

Sözdizimi

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

Bu işlev, yan tümcesi kullanılarak bir OVER olarak da çağrılabilir.

Argümanlar

  • expr: Sayısal veya aralık değeri döndüren ifade.
  • cond: Toplama amacıyla kullanılan satırları filtrelemek için isteğe bağlı bir boolean ifadesi.

İadeler

Sonuç türü, bağımsız değişkenler için olduğu gibi hesaplanır.

  • DECIMAL(p, s): Sonuç türü bir DECIMAL(p + 4, s + 4). DECIMAL veri tipi için maksimum hassasiyete ulaşılırsa, önemli basamakların kaybını önlemek amacıyla ölçekteki artış sınırlandırılır.
  • yıl-ay aralığı: Sonuç bir INTERVAL YEAR TO MONTHolur.
  • gün-zaman aralığı: Sonuç bir INTERVAL YEAR TO SECOND olur.
  • Diğer tüm durumlarda sonuç bir DOUBLEolur.

Gruptaki null değerler göz ardı edilir. Bir grup boşsa veya yalnızca null değerlerden oluşuyorsa sonuç NULL olur.

Belirtilirse DISTINCT , yinelemeler kaldırıldıktan sonra ortalama hesaplanır.

NULL yerine taşma durumunda hata vermek için avg kullanın.

Örnekler

> SELECT try_avg(col) FROM VALUES (1), (2), (3) AS tab(col);
 2.0

> SELECT try_avg(DISTINCT col) FROM VALUES (1), (1), (2) AS tab(col);
 1.5

> SELECT try_avg(col) FROM VALUES (1), (2), (NULL) AS tab(col);
 1.5

> SELECT try_avg(col) FROM VALUES (INTERVAL '1' YEAR), (INTERVAL '2' YEAR) AS tab(col);
 1-6

-- Overflow results in NULL for try_avg()
> SELECT try_avg(col) FROM VALUES (5e37::DECIMAL(38, 0)), (5e37::DECIMAL(38, 0)) AS tab(col);
 NULL

-- Overflow causes error for avg() in ANSI mode.
> SELECT avg(col) FROM VALUES (5e37::DECIMAL(38, 0)), (5e37::DECIMAL(38, 0)) AS tab(col);
 Error: ARITHMETIC_OVERFLOW