try_avg 집계 함수

적용 대상:검사 '예'로 표시 Databricks SQL 검사 '예'로 표시 Databricks Runtime 11.3 LTS 이상

그룹의 값에서 계산된 평균을 반환합니다. 오버플로가 있는 경우 NULL을 반환합니다.

구문

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

이 함수는 OVER 절을 사용하여 창 함수로 호출할 수도 있습니다.

인수

  • expr: 숫자 또는 간격 값을 반환하는 식입니다.
  • cond: 집계에 사용되는 행을 필터링하는 선택적 부울 식입니다.

반품

결과 형식은 인수에 대해 계산됩니다.

  • DECIMAL(p, s): 결과 형식은 DECIMAL(p + 4, s + 4)입니다. DECIMAL의 최대 정밀도에 도달하면 유효 숫자 손실을 방지하기 위해 스케일 증가가 제한됩니다.
  • 연도-월 간격: 결과는 INTERVAL YEAR TO MONTH입니다.
  • 일-시간 간격: 결과는 INTERVAL YEAR TO SECOND입니다.
  • 다른 모든 경우에서 결과는 DOUBLE입니다.

그룹 내의 Null은 무시됩니다. 그룹이 비어 있거나 Null로만 구성된 경우 결과는 Null입니다.

DISTINCT가 지정되면 중복이 제거된 후 평균이 계산됩니다.

오버플로의 경우 NULL 대신 오류를 표시하려면 avg를 사용합니다.

예제

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

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

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

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