https://yq.aliyun.com/articles/147?spm=a2c4e.11153940.blogcont148.23.1526746cjd2A4Y

摘要: PostgreSQL自带了一些常用的统计学聚合函数, 非常好用. 本文介绍一下方差和标准差的一些聚合函数. 总体方差 : population covariance 总体标准差 : population standard deviation 样本方差 : sample covariance 样本...

PostgreSQL自带了一些常用的统计学聚合函数, 非常好用.
本文介绍一下方差和标准差的一些聚合函数.总体方差 : population covariance
总体标准差 : population standard deviation
样本方差 : sample covariance
样本标准差 : sample standard deviation
均值 :  mean样本均值和样本方差的介绍 :
http://en.wikipedia.org/wiki/Sample_mean_and_sample_covariance
均值介绍 :
http://en.wikipedia.org/wiki/Mean对方差, 标准差, 均值不了解的话, 建议参考网易公开课, 统计学.
浅显易懂.
http://v.163.com/special/Khan/khstatistics.html
http://v.ku6.com/playlist/index_6598382.htmlPostgreSQL计算方差, 标准差的聚合函数如下 :
http://www.postgresql.org/docs/devel/static/functions-aggregate.html其中stddev和variance是stddev_samp和var_samp的别名.
这些函数用于计算数据集的总体/样本 方差,总体/样本 标准差.
例如 :
1,2,3,100 这组数据共4个值, 总体均值和样本均值分别为 :
(1+2+3+100)/4 = 26.5
总体方差 : ((1-26.5)^2 + (2-26.5)^2 + (3-26.5)^2 + (100-26.5)^2)/4 = 1801.25
样本方差 : ((1-26.5)^2 + (2-26.5)^2 + (3-26.5)^2 + (100-26.5)^2)/(4-1) = 2401.6666....
总体标准差 : 平方根(总体方差) = 42.4411357058220109
样本标准差 : 平方根(样本方差) = 49.0068022489395513
使用PostgreSQL计算如下 :
postgres=# select variance(id) from (values(1),(2),(3),(100)) as t(id);variance
-----------------------2401.6666666666666667
(1 row)
postgres=# select var_pop(id) from (values(1),(2),(3),(100)) as t(id);var_pop
-----------------------1801.2500000000000000
(1 row)
postgres=# select var_samp(id) from (values(1),(2),(3),(100)) as t(id);var_samp
-----------------------2401.6666666666666667
(1 row)
postgres=# select stddev(id) from (values(1),(2),(3),(100)) as t(id);stddev
---------------------49.0068022489395513
(1 row)
postgres=# select stddev_pop(id) from (values(1),(2),(3),(100)) as t(id);stddev_pop
---------------------42.4411357058220109
(1 row)
postgres=# select stddev_samp(id) from (values(1),(2),(3),(100)) as t(id);stddev_samp
---------------------49.0068022489395513
(1 row)[参考]
1. src/backend/utils/adt/float.c
/**              =========================*              FLOAT AGGREGATE OPERATORS*              =========================**              float8_accum            - accumulate for AVG(), variance aggregates, etc.*              float4_accum            - same, but input data is float4*              float8_avg                      - produce final result for float AVG()*              float8_var_samp         - produce final result for float VAR_SAMP()*              float8_var_pop          - produce final result for float VAR_POP()*              float8_stddev_samp      - produce final result for float STDDEV_SAMP()*              float8_stddev_pop       - produce final result for float STDDEV_POP()** The transition datatype for all these aggregates is a 3-element array* of float8, holding the values N, sum(X), sum(X*X) in that order.** Note that we represent N as a float to avoid having to build a special* datatype.  Given a reasonable floating-point implementation, there should* be no accuracy loss unless N exceeds 2 ^ 52 or so (by which time the* user will have doubtless lost interest anyway...)*/
..................
Datum
float8_var_pop(PG_FUNCTION_ARGS)
{ArrayType  *transarray = PG_GETARG_ARRAYTYPE_P(0);float8     *transvalues;float8          N,sumX,sumX2,numerator;transvalues = check_float8_array(transarray, "float8_var_pop", 3);N = transvalues[0];sumX = transvalues[1];sumX2 = transvalues[2];/* Population variance is undefined when N is 0, so return NULL */if (N == 0.0)PG_RETURN_NULL();numerator = N * sumX2 - sumX * sumX;CHECKFLOATVAL(numerator, isinf(sumX2) || isinf(sumX), true);/* Watch out for roundoff error producing a negative numerator */if (numerator <= 0.0)PG_RETURN_FLOAT8(0.0);PG_RETURN_FLOAT8(numerator / (N * N));
}Datum
float8_var_samp(PG_FUNCTION_ARGS)
{ArrayType  *transarray = PG_GETARG_ARRAYTYPE_P(0);float8     *transvalues;float8          N,sumX,sumX2,numerator;transvalues = check_float8_array(transarray, "float8_var_samp", 3);N = transvalues[0];sumX = transvalues[1];sumX2 = transvalues[2];/* Sample variance is undefined when N is 0 or 1, so return NULL */if (N <= 1.0)PG_RETURN_NULL();numerator = N * sumX2 - sumX * sumX;CHECKFLOATVAL(numerator, isinf(sumX2) || isinf(sumX), true);/* Watch out for roundoff error producing a negative numerator */if (numerator <= 0.0)PG_RETURN_FLOAT8(0.0);PG_RETURN_FLOAT8(numerator / (N * (N - 1.0)));
}Datum
float8_stddev_pop(PG_FUNCTION_ARGS)
{ArrayType  *transarray = PG_GETARG_ARRAYTYPE_P(0);float8     *transvalues;float8          N,sumX,sumX2,numerator;transvalues = check_float8_array(transarray, "float8_stddev_pop", 3);N = transvalues[0];sumX = transvalues[1];sumX2 = transvalues[2];/* Population stddev is undefined when N is 0, so return NULL */if (N == 0.0)PG_RETURN_NULL();numerator = N * sumX2 - sumX * sumX;CHECKFLOATVAL(numerator, isinf(sumX2) || isinf(sumX), true);/* Watch out for roundoff error producing a negative numerator */if (numerator <= 0.0)PG_RETURN_FLOAT8(0.0);PG_RETURN_FLOAT8(sqrt(numerator / (N * N)));
}Datum
float8_stddev_samp(PG_FUNCTION_ARGS)
{ArrayType  *transarray = PG_GETARG_ARRAYTYPE_P(0);float8     *transvalues;float8          N,sumX,sumX2,numerator;transvalues = check_float8_array(transarray, "float8_stddev_samp", 3);N = transvalues[0];sumX = transvalues[1];sumX2 = transvalues[2];/* Sample stddev is undefined when N is 0 or 1, so return NULL */if (N <= 1.0)PG_RETURN_NULL();numerator = N * sumX2 - sumX * sumX;CHECKFLOATVAL(numerator, isinf(sumX2) || isinf(sumX), true);/* Watch out for roundoff error producing a negative numerator */if (numerator <= 0.0)PG_RETURN_FLOAT8(0.0);PG_RETURN_FLOAT8(sqrt(numerator / (N * (N - 1.0))));
}

PostgreSQL 聚合函数讲解 - 3 总体|样本 方差, 标准方差相关推荐

  1. python计算样本方差_Python计算库numpy进行方差/标准方差/样本标准方差/协方差的计算...

    使用numpy可以做很多事情,在这篇文章中简单介绍一下如何使用numpy进行方差/标准方差/样本标准方差/协方差的计算. variance: 方差 方差(Variance)是概率论中最基础的概念之一, ...

  2. python方差的计算公式_Python计算库numpy进行方差/标准方差/样本标准方差/协方差的计算...

    使用numpy可以做很多事情,在这篇文章中简单介绍一下如何使用numpy进行方差/标准方差/样本标准方差/协方差的计算. variance: 方差 方差(Variance)是概率论中最基础的概念之一, ...

  3. PostgreSQL 10 自定义并行计算聚合函数的原理与实践

    标签 PostgreSQL , 聚合函数 , 自定义 , AGGREGATE , 并行 , COMBINEFUNC 背景 PostgreSQL 9.6开始就支持并行计算了,意味着聚合.扫描.排序.JO ...

  4. 《卸甲笔记》-PostgreSQL和Oracle的SQL差异分析之三:rownum和聚合函数

    PostgreSQL是世界上功能最强大的开源数据库,在国内得到了越来越多机构和开发者的青睐和应用.随着PostgreSQL的应用越来越广泛,Oracle向PostgreSQL数据库的数据迁移需求也越来 ...

  5. 第十二章 SQL聚合函数 VARIANCE, VAR_SAMP, VAR_POP

    文章目录 第十二章 SQL聚合函数 VARIANCE, VAR_SAMP, VAR_POP 大纲 参数 描述 当前事务期间所做的更改 示例 第十二章 SQL聚合函数 VARIANCE, VAR_SAM ...

  6. sqlzoo刷题——SUM and COUNT(聚合函数)

    前言 本文章记录sqlzoo刷题过程以及解题思路,每个小节不仅包含练习,还有选择题(quiz)部分的实现思路 网址:sqlzoo_SUM and COUNT 一.代码练习部分 展示世界的總人口. 查询 ...

  7. OpenCV——计算图像均值和标准方差

    图像的均值表示图像整体的亮暗程度,图像的均值越大图像整体越亮.标准方差表示图像中明暗变化的对比程度,标准差越大表示图像中明暗变化越明显. 计算图像均值 计算图像每个通道的均值 Scalar mean( ...

  8. Excel 2010 SQL应用097 聚合函数之方差或标准方差

    目录 源数据表 解决方案 VAR函数及VARP函数的使用 源数据表 姓名 口语成绩 黄惠 76 李向阳 90 柳青 84 黄燕凤 81 古学文 86 古凤冰 87 张初阳 82 候琳 85 龙维 83 ...

  9. 09 numpy 聚合函数 - 极值,方差,标准差

    === 聚合函数定义 === 对一组数据进行操作,如取均值.最大值等 scores = np.random.randint(1,9,[2,3]) scores array([[3, 2, 8], [4 ...

最新文章

  1. 使用指针做函数返回值
  2. (转)在Windows平台上安装Node.js及NPM模块管理
  3. 导入Excel和CSV文件
  4. android content item,Android中ContentProvider的应用实例
  5. Sublime Text 3 搭建Python3 IDE
  6. 软件工程 c java的联系_软件工程—WC功能实现 (JAVA)
  7. 解决Selenium Webdriver执行测试时,每个测试方法都打开一个浏览器窗口的问题
  8. Maxim推出上/下变频SiGe混频器MAX2042
  9. 《黑客秘笈——渗透测试实用指南(第2版)》—第1章1.6学习
  10. 千万不能错过的Android NDK下载安装及配置
  11. 图像处理(十四)HOG特征提取
  12. 电磁兼容入门篇之基础知识(二)
  13. 算法竞赛入门经典(紫书)第四章——Spreadsheet Tracking UVA-512
  14. SWIG简介 | win10和Linux下的安装--亲测 | (一)
  15. 原生js监听滚动条_JS原生监听滚动条
  16. ABAP clear、refresh、free的区别
  17. 【AcWing19】【LeetCode】DFS - 46/47/39/77/78/216/17/131/93/90/491
  18. OSS服务和自建服务器存储对比
  19. python灰色波浪线,PyCharm关闭碍眼的波浪线图文详解
  20. 论文阅读:Fast Optical Flow using Dense Inverse Search

热门文章

  1. MATLAB等额还款代码,matlab算法实现对等额本息和等额本金两种还款方式的计算
  2. easyPOI导出时间字段注意事项
  3. 新生入学了,针对腾讯的产品全民K歌(或QQ空间、腾讯游戏......)做一次推广活动,包括产品功能设计和运营活动推广方案。
  4. DirectX修复工具使用
  5. Spring整合RabbitMQ(包含生产者和消费者)
  6. 互换性测量技术-几何误差
  7. Python:用海龟作图turtle画一个小丑
  8. 【NOIP2015模拟10.28B组】终章-剑之魂
  9. 公司新产品之我见(1)——智能家居中的无线充电/供电设备
  10. 普通云硬盘,高性能云硬盘和SSD云硬盘三者之间有什么区别?