如何在SQL中计算两个变量之间的相关性?
SQL 计算两个变量相关关系的方法
完全可以在 SQL 中实现两个变量的相关性计算,最常用的是皮尔逊积矩相关系数,结果取值范围为-1到1,绝对值越大代表相关性越强,正负符号对应正相关/负相关。
通用实现(兼容所有主流SQL引擎)
基于皮尔逊相关系数的标准公式推导,不需要依赖数据库内置的相关性函数,通用写法如下:
假设你的数据存储在表your_table中,需要计算相关性的两个变量列名为x和y:
SELECT (COUNT(*) * SUM(x * y) - SUM(x) * SUM(y)) / SQRT( (COUNT(*) * SUM(x * x) - SUM(x) * SUM(x)) * (COUNT(*) * SUM(y * y) - SUM(y) * SUM(y)) ) AS pearson_correlation FROM your_table WHERE x IS NOT NULL AND y IS NOT NULL -- 过滤空值避免结果偏差
简化写法(支持内置函数的数据库可用)
PostgreSQL、SQL Server 2022+、BigQuery、Spark SQL等较新的SQL引擎已经内置了CORR聚合函数,可以直接调用得到结果:
SELECT CORR(x, y) AS pearson_correlation FROM your_table WHERE x IS NOT NULL AND y IS NOT NULL
注意事项
- 如果需要按不同分组分别计算相关性,直接在查询末尾添加
GROUP BY 分组列名即可 - 如果两个变量的方差为0,分母会出现0值导致计算报错,建议提前校验数据分布
内容的提问来源于stack exchange,提问作者Grant Bracey
相关产品推荐
相关产品推荐

