適用於:Databricks SQL
Databricks Runtime
傳回從群組值計算的平均值。 此函式與聚合函數同mean
義。
語法
avg( [ALL | DISTINCT] expr) [FILTER ( WHERE cond ) ]
引數
-
expr
:會評估為數值或時間間隔的表達式。 -
cond
:選擇性布爾表示式,篩選用於匯總的數據列。
返回
結果類型的計算方式與參數相同。
-
DECIMAL(p, s)
:結果類型為DECIMAL(p + 4, s + 4)
。 如果DECIMAL
已達最大精確度,規模增加將會受到限制,以避免遺失有效位數。 - 年月間隔:結果為
INTERVAL YEAR TO MONTH
。 - 白天時間間隔:結果是
INTERVAL DAY TO SECOND
。 - 在所有其他情況下,結果是
DOUBLE
。
在群組內的 Null 會被忽略。 如果群組是空的,或只包含 Null,則結果為 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