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

Bir grubun değerlerinden hesaplanan ortalamayı döndürür. Bu işlev, toplama işlevinin eş anlamlısıdırmean.

Sözdizimi

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

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

Tartışmalar

  • expr: Sayısal veya aralık olarak değerlendirilen ifade.
  • cond: Toplama için kullanılan satırları filtreleyen isteğe bağlı bir boole ifadesi.

İadeler

Sonuç türü bağımsız değişkenler için olarak hesaplanır:

  • DECIMAL(p, s): Sonuç türü bir DECIMAL(p + 4, s + 4). Maksimum duyarlık DECIMAL düzeyine ulaşılırsa önemli basamakların kaybını önlemek için ölçek artışı sınırlandırılır.
  • yıl-ay aralığı: Sonuç bir INTERVAL YEAR TO MONTHolur.
  • gün-zaman aralığı: Sonuç bir INTERVAL DAY TO SECOND olur.
  • Diğer tüm durumlarda sonuç bir DOUBLEolur.

Gruptaki null değerler yoksayılır. Bir grup boşsa veya yalnızca null değerlerden oluşuyorsa, sonuç olur NULL.

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

Sonuç türü taşıyorsa, Azure Databricks bir ARITHMETIC_OVERFLOW hatası oluşturur. Bunun yerine NULL döndürmek için try_avg kullanın.

Uyarı

Databricks Runtime'da spark.sql.ansi.enabled ise false, hata yerine taşma döndürür NULL .

Yaygın hata koşulları

Örnekler

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

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

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

> SELECT 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