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 |
+----------------------+