PostgreSQL 聚合函数讲解 - 3 总体|样本 方差, 标准方差
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 总体|样本 方差, 标准方差相关推荐
- python计算样本方差_Python计算库numpy进行方差/标准方差/样本标准方差/协方差的计算...
使用numpy可以做很多事情,在这篇文章中简单介绍一下如何使用numpy进行方差/标准方差/样本标准方差/协方差的计算. variance: 方差 方差(Variance)是概率论中最基础的概念之一, ...
- python方差的计算公式_Python计算库numpy进行方差/标准方差/样本标准方差/协方差的计算...
使用numpy可以做很多事情,在这篇文章中简单介绍一下如何使用numpy进行方差/标准方差/样本标准方差/协方差的计算. variance: 方差 方差(Variance)是概率论中最基础的概念之一, ...
- PostgreSQL 10 自定义并行计算聚合函数的原理与实践
标签 PostgreSQL , 聚合函数 , 自定义 , AGGREGATE , 并行 , COMBINEFUNC 背景 PostgreSQL 9.6开始就支持并行计算了,意味着聚合.扫描.排序.JO ...
- 《卸甲笔记》-PostgreSQL和Oracle的SQL差异分析之三:rownum和聚合函数
PostgreSQL是世界上功能最强大的开源数据库,在国内得到了越来越多机构和开发者的青睐和应用.随着PostgreSQL的应用越来越广泛,Oracle向PostgreSQL数据库的数据迁移需求也越来 ...
- 第十二章 SQL聚合函数 VARIANCE, VAR_SAMP, VAR_POP
文章目录 第十二章 SQL聚合函数 VARIANCE, VAR_SAMP, VAR_POP 大纲 参数 描述 当前事务期间所做的更改 示例 第十二章 SQL聚合函数 VARIANCE, VAR_SAM ...
- sqlzoo刷题——SUM and COUNT(聚合函数)
前言 本文章记录sqlzoo刷题过程以及解题思路,每个小节不仅包含练习,还有选择题(quiz)部分的实现思路 网址:sqlzoo_SUM and COUNT 一.代码练习部分 展示世界的總人口. 查询 ...
- OpenCV——计算图像均值和标准方差
图像的均值表示图像整体的亮暗程度,图像的均值越大图像整体越亮.标准方差表示图像中明暗变化的对比程度,标准差越大表示图像中明暗变化越明显. 计算图像均值 计算图像每个通道的均值 Scalar mean( ...
- Excel 2010 SQL应用097 聚合函数之方差或标准方差
目录 源数据表 解决方案 VAR函数及VARP函数的使用 源数据表 姓名 口语成绩 黄惠 76 李向阳 90 柳青 84 黄燕凤 81 古学文 86 古凤冰 87 张初阳 82 候琳 85 龙维 83 ...
- 09 numpy 聚合函数 - 极值,方差,标准差
=== 聚合函数定义 === 对一组数据进行操作,如取均值.最大值等 scores = np.random.randint(1,9,[2,3]) scores array([[3, 2, 8], [4 ...
最新文章
- 使用指针做函数返回值
- (转)在Windows平台上安装Node.js及NPM模块管理
- 导入Excel和CSV文件
- android content item,Android中ContentProvider的应用实例
- Sublime Text 3 搭建Python3 IDE
- 软件工程 c java的联系_软件工程—WC功能实现 (JAVA)
- 解决Selenium Webdriver执行测试时,每个测试方法都打开一个浏览器窗口的问题
- Maxim推出上/下变频SiGe混频器MAX2042
- 《黑客秘笈——渗透测试实用指南(第2版)》—第1章1.6学习
- 千万不能错过的Android NDK下载安装及配置
- 图像处理(十四)HOG特征提取
- 电磁兼容入门篇之基础知识(二)
- 算法竞赛入门经典(紫书)第四章——Spreadsheet Tracking UVA-512
- SWIG简介 | win10和Linux下的安装--亲测 | (一)
- 原生js监听滚动条_JS原生监听滚动条
- ABAP clear、refresh、free的区别
- 【AcWing19】【LeetCode】DFS - 46/47/39/77/78/216/17/131/93/90/491
- OSS服务和自建服务器存储对比
- python灰色波浪线,PyCharm关闭碍眼的波浪线图文详解
- 论文阅读:Fast Optical Flow using Dense Inverse Search
热门文章
- MATLAB等额还款代码,matlab算法实现对等额本息和等额本金两种还款方式的计算
- easyPOI导出时间字段注意事项
- 新生入学了,针对腾讯的产品全民K歌(或QQ空间、腾讯游戏......)做一次推广活动,包括产品功能设计和运营活动推广方案。
- DirectX修复工具使用
- Spring整合RabbitMQ(包含生产者和消费者)
- 互换性测量技术-几何误差
- Python:用海龟作图turtle画一个小丑
- 【NOIP2015模拟10.28B组】终章-剑之魂
- 公司新产品之我见(1)——智能家居中的无线充电/供电设备
- 普通云硬盘,高性能云硬盘和SSD云硬盘三者之间有什么区别?