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
  • day-time interval:結果為 INTERVAL DAY TO SECOND
  • 在其他所有情況下,結果都是 DOUBLE。

系統會忽略群組內的 Null。 如果群組是空的,或只包含 Null,則結果為 Null。

如果 DISTINCT 指定 ,則會在移除重複專案之後計算平均值。

如果結果溢位結果類型,Azure Databricks 就會引發 ARITHMETIC_OVERFLOW 錯誤。 若要傳回 Null,請改用 try_avg

警告

在 Databricks Runtime 中,如果 spark.sql.ansi.enabledfalse ,則溢位會 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