に最終更新
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 |
+----------------------+