최종 수정: 에
AVG_WEIGHTED
설명
가중 산술 평균을 계산합니다. 즉, 각 값과 해당 가중치의 곱을 모두 더한 값을 가중치의 총합으로 나눈 결과입니다. 가중치의 총합이 0이면 NaN을 반환합니다. 계산은 항상 Double 타입을 사용하여 수행합니다.
구문
AVG_WEIGHTED(<x>, <weight>)
매개변수
| 매개변수 | 설명 |
|---|---|
<x> | 평균을 계산할 숫자 표현식으로, 컬럼 이름, 상수 또는 복잡한 숫자 표현식을 사용할 수 있습니다. 지원되는 타입은 Double입니다. |
<weight> | 숫자 표현식으로, 일반적으로 컬럼 이름, 상수 또는 다른 숫자 계산의 결과를 사용합니다. 지원되는 타입은 Double입니다. |
반환 값
각 값과 해당 가중치의 곱을 모두 더한 후 가중치의 총합으로 나눈 값을 반환합니다. 가중치의 총합이 0이면 NaN을 반환합니다. 반환 타입은 항상 Double입니다.
예제
-- setup
create table t1(
k1 int,
k2 int,
k3 decimal(10, 2),
k4 double,
category varchar(50)
) distributed by hash (k1) buckets 1
properties ("replication_num"="1");
insert into t1 values
(10, 100, 5.5, 1.0, 'A'),
(20, 200, 10.0, 2.0, 'A'),
(30, 300, 15.5, 3.0, 'B'),
(40, 400, 20.0, 4.0, 'B'),
(50, 0, 25.0, 0.0, 'C'),
(60, 600, 30.0, 5.0, 'C');
select avg_weighted(k2, k1) from t1;
전체 레코드의 가중 평균을 계산합니다: (10010 + 20020 + 30030 + 40040 + 050 + 60060) / (10+20+30+40+50+60) ≈ 314.2857
+----------------------+
| avg_weighted(k2, k1) |
+----------------------+
| 314.2857142857143 |
+----------------------+
select category, avg_weighted(k2, k1) from t1 group by category;
카테고리별로 그룹화하여 각 그룹의 가중 평균을 계산합니다.
+----------+----------------------+
| category | avg_weighted(k2, k1) |
+----------+----------------------+
| A | 166.66666666666666 |
| B | 357.14285714285717 |
| C | 327.27272727272725 |
+----------+----------------------+
select avg_weighted(k2, 0) from t1;
모든 가중치가 0이면 NaN을 반환합니다.
+---------------------+
| avg_weighted(k2, 0) |
+---------------------+
| NaN |
+---------------------+
select avg_weighted(k2, k1) from t1 where k1 > 100;
쿼리 결과가 비어 있으면 NULL을 반환합니다.
+----------------------+
| avg_weighted(k2, k1) |
+----------------------+
| NULL |
+----------------------+