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