CORR 函数
功能描述
CORR 函数用于计算两个数值列之间的皮尔逊相关系数(Pearson correlation coefficient)。相关系数衡量两个变量之间的线性相关程度,取值范围为 -1 到 1。
参数说明
y:数值类型的表达式,作为因变量。必须是可以转换为 DOUBLE 的数值类型。
x:数值类型的表达式,作为自变量。必须是可以转换为 DOUBLE 的数值类型。
返回类型
- 返回
DOUBLE 类型的皮尔逊相关系数,取值范围为 [-1, 1]。
1:完全正相关(x 增大,y 也增大)
-1:完全负相关(x 增大,y 减小)
0:无线性相关
- 接近
1 或 -1:强相关
- 接近
0:弱相关或无相关
注意事项
- 函数计算过程中,
NULL 值将被忽略,不参与计算。
- 如果所有 x 值相同或所有 y 值相同(标准差为 0),返回
NULL。
- 如果有效数据点少于 2 个,返回
NULL。
- 计算公式:
corr(y, x) = covar_pop(y, x) / (stddev_pop(y) * stddev_pop(x)),即协方差除以两个变量标准差的乘积。
使用示例
- 基本用法:计算相关系数
SELECT corr(c1, c2)
FROM VALUES (3, 2), (3, 3), (3, 3), (6, 4) AS tab(c1, c2);
+--------------------+
| corr(c1, c2) |
+--------------------+
| 0.816496580927726 |
+--------------------+
- 完全正相关(y = x)
SELECT corr(x, y)
FROM VALUES (1, 1), (2, 2), (3, 3), (4, 4) AS t(x, y);
+-------------+
| corr(x, y) |
+-------------+
| 1.0 |
+-------------+
- 完全负相关(y = -x)
SELECT corr(x, y)
FROM VALUES (1, -1), (2, -2), (3, -3), (4, -4) AS t(x, y);
+-------------+
| corr(x, y) |
+-------------+
| -1.0 |
+-------------+
- 无相关(x 和 y 独立)
SELECT corr(x, y)
FROM VALUES (1, 1), (2, 1), (3, 1), (4, 1) AS t(x, y);
+-------------+
| corr(x, y) |
+-------------+
| NULL |
+-------------+
- 按分组计算相关系数
SELECT
category,
corr(price, quantity) as price_quantity_corr
FROM VALUES
('A', 10, 100),
('A', 20, 80),
('A', 30, 60),
('B', 15, 50),
('B', 25, 40),
('B', 35, 30)
AS sales(category, price, quantity)
GROUP BY category;
+----------+----------------------+
| category | price_quantity_corr |
+----------+----------------------+
| A | -1.0 |
| B | -1.0 |
+----------+----------------------+