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

ينطبق على:التحقق تم وضع علامة نعم على التحقق من Databricks SQL الذي تم وضع علامة عليه نعم Databricks Runtime

إرجاع المتوسط المحسوب من قيم مجموعة. هذه الدالة هي مرادف لدالة تجميعية متوسطة.

بناء الجمله

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

يمكن أيضا استدعاء هذه الدالة كدالة نافذة باستخدام العبارة OVER .

الحجج

  • expr: تعبير يتم تقييمه إلى رقم أو فاصل زمني.
  • cond: تعبير منطقي اختياري يقوم بتصفية الصفوف المستخدمة للتجميع.

ارجاع

يتم حساب نوع النتيجة على أنه للوسيطات:

  • DECIMAL(p, s): نوع النتيجة هو . DECIMAL(p + 4, s + 4) إذا تم الوصول إلى الدقة القصوى ل DECIMAL، فستقتصر الزيادة في المقياس على تجنب فقدان أرقام كبيرة.
  • الفاصل الزمني لشهر السنة: النتيجة هي INTERVAL YEAR TO MONTH.
  • الفاصل الزمني لليوم: النتيجة هي INTERVAL DAY TO SECOND.
  • في جميع الحالات الأخرى تكون النتيجة DOUBLE.

يتم تجاهل القيم الخالية داخل المجموعة. إذا كانت المجموعة فارغة أو تتكون فقط من القيم الخالية، تكون النتيجة NULL.

إذا DISTINCT تم تحديد المتوسط يتم حسابه بعد إزالة التكرارات.

إذا تجاوزت النتيجة نوع النتيجة، فإن Azure Databricks يثير خطأ ARITHMETIC_OVERFLOW . لإرجاع NULL بدلا من ذلك استخدم try_avg.

تحذير

في Databricks Runtime، إذا كان spark.sql.ansi.enabled هو false، فإن تجاوز التدفق يرجع NULL بدلا من خطأ.

امثله

> 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: CANNOT_CHANGE_DECIMAL_PRECISION