如何使用SQL的COVAR_POP函数计算协方差?

P粉602998670

P粉602998670

2026-08-02

300人浏览

原创

covar_pop是计算总体协方差的聚合函数,即基于全部数据、分母为n的协方差;其公式为avg(xy) - avg(x)avg(y),要求两个数值表达式成对非null才参与计算,结果为number类型,全空则返回null。

如何使用sql的covar_pop函数计算协方差?

COVAR_POP 是什么,它算的是哪个协方差?

COVAR_POP 计算的是总体协方差(population covariance),即基于全部数据而非样本的协方差。它默认把输入的两列当作完整总体,分母用 n(行数),不是 n-1。如果你的数据本身就是全量业务数据(比如某月所有订单的销售额和利润),用 COVAR_POP 合理;如果是抽样数据,更常用的是 COVAR_SAMP

  • 协方差公式为:AVG(x <em> y) - AVG(x) </em> AVG(y)COVAR_POP 内部正是按这个逻辑实现的
  • 必须传入两个数值表达式,且成对非 NULL 才参与计算
  • 如果所有行中任意一列为 NULL,则该行被跳过;若无有效行,结果为 NULL

怎么写 COVAR_POP 的基本语法?

直接在 SELECT 或聚合上下文中调用,不能用于窗口函数(多数数据库不支持 COVAR_POP() OVER(...),PostgreSQL 14+ 才开始实验性支持):

Ardot
Ardot

腾讯设计推出的类似Figma的AI协同UI/UX 设计工具

下载
SELECT COVAR_POP(sales_amount, profit) FROM orders WHERE order_date >= '2024-01-01';
  • 参数顺序敏感:第一个是 X,第二个是 Y,交换后结果不变(协方差对称),但语义上别弄反业务含义
  • 不支持常量或标量子查询作为参数,例如 COVAR_POP(100, column) 会报错
  • 若表中存在大量 NULL 值,实际参与计算的行数可能远少于预期,建议先用 COUNT(*)COUNT(column1, column2) 对比确认

常见错误:为什么 COVAR_POP 返回 NULL 或 0?
  • COVAR_POP 返回 NULL 的典型原因:
    • 输入的两列在所有行中至少有一列为 NULL(即没有一对非 NULL 的 (x, y)
    • 表为空,或 WHERE 条件过滤后无数据
  • 返回 0 并不意味着无相关性,只说明线性协方差为 0(可能呈非线性关系,或数据本身均值极低)
  • 在 MySQL 8.0.22 之前不支持 COVAR_POP,会报错 FUNCTION xxx.COVAR_POP does not exist;需改用等价表达式 AVG(x<em>y) - AVG(x)</em>AVG(y)
  • PostgreSQL 对 COVAR_POP 要求两列同为数值类型,若其中一列为 TEXT 且含数字字符串,必须显式 ::NUMERIC 转换,否则报错 function covar_pop(text, numeric) does not exist

和 COVAR_SAMP 一起用时要注意什么?

COVAR_POPCOVAR_SAMP 仅在分母上不同:前者除以 n,后者除以 n-1。当 n = 1 时,COVAR_SAMP 返回 NULL(因分母为 0),而 COVAR_POP 返回 0(因分子也为 0)。

  • 实际使用中,如果不确定数据是否为总体,优先查清业务背景;误用 COVAR_POP 代替 COVAR_SAMP 会导致低估离散程度
  • 多数 BI 工具(如 Metabase、Superset)的协方差字段默认调用的是 COVAR_SAMP,直接写 SQL 时容易忽略这个差异
  • 在同一查询中混用二者无意义,但可以并列输出对比:
    SELECT COVAR_POP(x, y) AS pop_cov, COVAR_SAMP(x, y) AS samp_cov FROM data;

协方差本身量纲依赖原始单位,单独看数值大小没意义;真正关键的是符号(正/负)和后续标准化得到的相关系数。别只盯着 COVAR_POP 的输出数字,忘了做 CORR 或标准化处理。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

2023.10.12

2473

8

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.27

449

4

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

2024.02.23

614

5

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

2024.03.06

3970

10

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

2024.03.06

1346

4

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

2024.04.07

3562

11

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

2024.04.29

3515

6

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

2024.04.29

642

5

sql中删除一列的命令是什么
sql中删除一列的命令是什么

在sql中,使用alter table语句可以删除一列,语法为:alter table table_name drop column column_name。想了解更多sql的相关内容,可以阅读本专题下面的文章。

2024.04.29

526

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.4万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 131.8万人学习