Перейти к содержимому
Последнее обновление

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