적용 대상: Databricks SQL
Databricks Runtime
그룹의 값에서 계산된 평균을 반환합니다. 이 함수는 집계 함수의 동의어mean
입니다.
구문
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은 무시됩니다. 그룹이 비어 있거나 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