メインコンテンツまでスキップ
バージョン: 26.x

AVG_WEIGHTED

デスクリプション

加重算術平均を計算します。つまり、対応する値と重みの積の合計を重みの総和で割った結果を返します。重みの総和が0の場合、NaNを返します。計算は常にDouble型を使用して実行されます。

Syntax

AVG_WEIGHTED(<x>, <weight>)

パラメータ

Parameterデスクリプション
<x>平均を計算する対象となる数値式で、列名、定数、または複雑な数値式を指定できます。サポートされる型はDoubleです。
<weight>数値式で、通常は列名、定数、または他の数値計算の結果を指定します。サポートされる型はDoubleです。

Return Value

対応する値と重みの積の合計を累積し、重みの総和で除算した値が返されます。重みの総和が0の場合、NaNが返されます。 戻り値の型は常にDoubleです。

Example

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