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

CORR_WELFORD

Описание​

Вычисляет коэффициент корреляции Пирсона между двумя случайными величинами с помощью алгоритма Welford, который эффективно снижает погрешности вычислений.

Синтаксис​

CORR_WELFORD(<expr1>, <expr2>)

Параметры​

ПараметрыОписание
<expr1>Выражение типа Double (столбец)
<expr2>Выражение типа Double (столбец)

Возвращаемое значение​

Возвращает значение типа DOUBLE, равное ковариации expr1 и expr2, делённой на произведение их стандартных отклонений. Особые случаи:

  • Если стандартное отклонение expr1 или expr2 равно 0, возвращает 0.
  • Если expr1 или expr2 содержит значения NULL, соответствующие строки исключаются из итогового результата.
  • Если в группе нет допустимых данных, возвращает NULL.

Пример​

-- setup
create table test_corr(
id int,
k1 double,
k2 double
) distributed by hash (id) buckets 1
properties ("replication_num"="1");

insert into test_corr values
(1, 20, 22),
(1, 10, 20),
(2, 36, 21),
(2, 30, 22),
(2, 25, 20),
(3, 25, NULL),
(4, 25, 21),
(4, 25, 22),
(4, 25, 20);
select * from test_corr order by id, k1, k2;
+------+------+------+
| id | k1 | k2 |
+------+------+------+
| 1 | 10 | 20 |
| 1 | 20 | 22 |
| 2 | 25 | 20 |
| 2 | 30 | 22 |
| 2 | 36 | 21 |
| 3 | 25 | NULL |
| 4 | 25 | 20 |
| 4 | 25 | 21 |
| 4 | 25 | 22 |
+------+------+------+
select id, corr_welford(k1, k2) from test_corr group by id order by id;
+------+----------------------+
| id | corr_welford(k1, k2) |
+------+----------------------+
| 1 | 1 |
| 2 | 0.4539206495016017 |
| 3 | NULL |
| 4 | 0 |
+------+----------------------+

Если в группе нет допустимых пар (k1, k2) (в данном случае ни одна строка не соответствует условию id = 999), агрегатная функция возвращает NULL.

select corr_welford(k1, k2) from test_corr where id = 999;
+----------------------+
| corr_welford(k1, k2) |
+----------------------+
| NULL |
+----------------------+