今天一个同事碰到一个问题:用SQL求一个指标的计算公式:其中Xi即指标,X指标均值,N是指标个数,看到这样的计算公式确实比较发愁。在处理问题前,先去恶补了下数理统计方面的知识(数理统计的知识基本上都还给老师了):方差、标准差、平均值.....

随机变量是指变量的值无法预先确定仅以一定的可能性(概率)取值的量。它是由于随机而获得的非确定值,是概率中的一个基本概念。

样本方差 :样本中各数据与样本平均数的差的平方和的平均数叫样本方差。

样本标准差:样本方差的算术平方根叫做样本标准差。

样 本方差和样本标准差都是衡量一个样本波动大小的量,样本方差或样本标准差越大,样本数据的波动就越大。 数学上一般用E{[X-E(X)]^2}来度量随机变量X与其均值E(X)即期望的偏离程度,称为X的方差。标准偏差公式:S = Sqrt[(∑(xi-x拨)^2) /N]公式中∑代表总和,x拨代表x的均值,^2代表二次方,Sqrt代表平方根。

假设有一组数值 x1, ..., xN (皆为实数),其平均值为:

此组数值的标准差为:

 一随机变量X 的标准差定义为:

须注意并非所有随机变量都具有标准差,因为有些随机变量不存在期望值。 如果随机变量 X 为 x1,...,xN 具有相同机率,则可用上述公式计算标准差。从一大组数值当中取出一样本数值组合 x1,...,xn ,常定义其样本标准差:

到 这里估计有些人犯迷糊了,到底标准差是哪个呢?到底是除以n还是n-1呢? (纠结这个也是由于后面的ORACLE函数而必须纠结),当时也是看见有些资料说标准差是这个,有些是哪个. 其实第一个公式是对一组固定数值而言,而第二歌公式是从随机变量随机抽样的N个样本(目前我是这样理解的,不知道对错与否)。

接 下来我想找找ORACLE里面有没有这样的数学函数。刚开始想到STDDEV(DISTINCT|ALL)函数,ALL表示对所有的值求求标准偏 差,DISTINCT表示只对不同的值求标准差,对于STDDEV、STDDEV_POP、STDDEV_SAMP这三者之间查别,也是一知半解:查看用 户手册:定义如下所示:(水平有限,翻译不当,敬请指出)

STDDEV returns sample standard deviation of expr, a set of numbers. You can use it as both an aggregate and analytic function. It differs from STDDEV_SAMP in that STDDEV returns zero when it has only 1 row of input data, whereas STDDEV_SAMP returns a null.
Oracle calculates the standard deviation as the square root of the variance defined for the VARIANCE aggregate function.,翻译如下:STDDEV返回样本标准差表达式 ,你可以用它作为聚合或分析函数。它不同于STDDEV_SAMP函数,当只有一行数据时,STDDEV返回0, 而STDDEV_SAMP返回null值。 ORACLE用VARIANCE聚合函数的算术平方根来计算标准方差STDDEV_POP computes the population standard deviation and returns the square root of the population variance. You can use it as both an aggregate and analytic function.
The expr is a number expression, and the function returns a value of type NUMBER. This function is the same as the square root of the VAR_POP function. When VAR_POP returns null, this function returns null.翻译如下:STDDEV_POP计算总体标准差(机器翻译,不知道准不准。其实就是计算一组已经定下来数值的标准差,而不是抽样-样本) ,返回方差的算术平方根。你可以用它作为分析或聚合函数。表达式是数值,则函数返回NUMBER类型的值,函数等效于VAR_POP函数的算术平方根。 当VAR_POP函数返回null,STDDEV_POP函数返回null值。 STDDEV_SAMP computes the cumulative sample standard deviation and returns the square root of the sample variance. You can use it as both an aggregate and analytic function.
The expr is a number expression, and the function returns a value of type NUMBER. This function is same as the square root of the VAR_SAMP function. When VAR_SAMP returns null, this function returns null. 翻译如下:STDDEV_SAMP函数计算样本标准差,返回样本方差的算术平方根。你可以用它作为聚合函数和分析函数。当表达式是数值类型,函数返回NUMBER类型的数值。这个函数等效于函数VAR_SAM的平方根。当VAR_SAMP返回null值,它也返回null值。

其实到目前,我们知道了STDDEV与STDDEV_SAMP基本上是一致的。只是当只有一行数据时,返回的值不同而已,但是我们对 STDDEV_POP与STDDEV之间区别还是不太清楚。只好硬着头皮写SQL脚本来验证一下这两个函数了。我们现在做个试验,假设SCOTT.EMP 表的工资字段就是我们所要求的指标,我们要求SAL字段的标准方差,下面用最原始的SQL脚本来模拟一下吧。

--方法1
SELECT SQRT(SUM(SAL)/MAX(CNT))
FROM
(    SELECT POWER((SAL - AVG(SAL) OVER()),2) AS SAL,COUNT(1) OVER() AS CNTFROM SCOTT.EMP
) ;--方法2
SELECT SQRT(SUM( POWER((SAL - (SELECT AVG(SAL) FROM SCOTT.EMP)), 2)/(SELECT COUNT(1) FROM SCOTT.EMP)))FROM SCOTT.EMP

接下来我们来看看用STDDEV、STDDEV_POP函数计算的结果。从下图你就可以知道STDDEV_POP是哪个计算公式了吧。呵呵

那么STDDEV的计算公式是什么呢?我测试发现其实STDDEV的标准差计算公式是

SELECT SQRT(SUM( POWER((SAL - (SELECT AVG(SAL) FROM SCOTT.EMP)), 2)/((SELECT COUNT(1) FROM SCOTT.EMP) -1)))
FROM SCOTT.EMP;

它们是等效的。有兴趣的可以试试。到此我么可以看出这几个ORACLE函数的计算公式:

STDDEV_POP                                                STDDEV

另外附上其它几个也不太常用的函数:

CORR
功能描述:返回一对表达式的相关系数,它是如下的缩写:
COVAR_POP(expr1,expr2)/STDDEV_POP(expr1)*STDDEV_POP(expr2))
VARIANCE
功能描述:返回一对表达式的样本方差 SQRT(VARIANCE(expr)) = STDEV(expr)
COVAR_POP
功能描述:返回一对表达式的方差。   SQRT(COVAR_POP(expr)) = STDDEV_POP(expr)
COVAR_SAMP
功能描述:返回一对表达式的样本方差 SQRT(VOVAR_SAMP(expr)) = STDDEV_SAMP(expr)

ORALC的STDDEV、STDDEV_POP、STDDEV_SAMP等函数相关推荐

  1. hive函数 -- stddev , stddev_pop , stddev_samp , var_pop , var_samp

    标准差是方差的平方根 1.方差公式: m为x1,x2...xn数列的期望值(平均数) s^2 = [(x1-m)^2 + (x2-m)^2 + ... (xn-m)^2]/n s即为标准差 s^2为方 ...

  2. hive -- stddev , stddev_pop , stddev_samp , var_pop , var_samp(计算方差标准差等)

    标准差是方差的平方根  1.方差公式:  m为x1,x2-xn数列的期望值(平均数)  s^2 = [(x1-m)^2 + (x2-m)^2 + - (xn-m)^2]/n  s即为标准差  s^2为 ...

  3. ORALC/HIVE 的STDDEV、STDDEV_POP、STDDEV_SAMP等函数

    今天一个同事碰到一个问题:用SQL求一个指标的计算公式:其中Xi即指标,X-指标均值,N是指标个数,看到这样的计算公式确实比较发愁.在处理问题前,先去恶补了下数理统计方面的知识(数理统计的知识基本上都 ...

  4. ORALC常用函数(五)----STDDEV、STDDEV_POP、STDDEV_SAMP等函数

     作者:潇湘隐者 出处:http://www.cnblogs.com/kerrycode/ 今天一个同事碰到一个问题:用SQL求一个指标的计算公式:其中Xi即指标,X-指标均值,N是指标个数,看到 ...

  5. 分析函数-STDDEV,STDDEV_SAMP ,STDDEV_POP,VAR_POP,VAR_SAMP,VARIANCE

    /*STDDEV:计算当前行关于组的标准偏离 STDDEV_SAMP : 该函数计算累积样本标准偏离,并返回总体变量的平方根 STDDEV与 stddev_samp 的不同之处在于,当计算的输入数据只 ...

  6. Oracle 聚合函数(Aggregate Functions)说明

    Oracle Aggregate Functions用过很多,官网的说明如下: Aggregate Functions http://docs.oracle.com/cd/E11882_01/serv ...

  7. mysql偏差聚集_My SQL聚合函数

    网址:https://www.w3resource.com/mysql/aggregate-functions-and-grouping/aggregate-functions-and-groupin ...

  8. TiDB函数和操作符

    函数和操作符概述 TiDB 中函数和操作符使用方法与 MySQL 基本一致,详情参见: Functions and Operators. 在 SQL 语句中,表达式可用于诸如 SELECT 语句的 O ...

  9. ORACLE 11G 聚合函数

    聚合函数就是基于多行数据返回一行结果,下面就是Oracle提供的一些列聚合函数: AVG COLLECT CORR CORR_* COUNT COVAR_POP COVAR_SAMP CUME_DIS ...

最新文章

  1. 我们人类与人工智能技术究竟是怎样的关系?
  2. 为什么要选择Apache Pulsar:IO隔离
  3. HSRP和VRRP在企业网中的应用
  4. hive和hbase区别和联系
  5. Zoom并非端到端加密、TikTok第一季度下载量全球第一等|Decode the Week
  6. python定义了函数却显示未定义_python
  7. Linux下matlab中文乱码,linux下安装的matlab无法显示中文,怎么办?求详细解答!谢谢!...
  8. linux快速删除60万文件,Linux下快速删除大量文件
  9. Python扩展库numpy中的布尔运算
  10. iOS学习——UITableViewCell两种重用方法的区别
  11. 添加WSS3.0中文模板
  12. 用Discrete Cosine Transform实现jpeg压缩
  13. Java——正则表达式
  14. 《OceanBase 数据库系统概念》首次发布,系统精准定义 OceanBase
  15. k8s中安装traefix并配置dashboard访问权限
  16. 大文件上传控件webupload插件
  17. 浅谈MySQL查询优化
  18. Navicat for MySQL 连接 MySQL 报2005错误
  19. 算法中的P问题、NP问题、NP难问题和NP完全问题
  20. win7无线热点_智能手机变成台式电脑的无线网卡来使用并连接WIFI上网的方法

热门文章

  1. 发明专利申请的必要条件
  2. 12290890329_软成3班廖炯雄第一次做业
  3. 丑数_题目1214:丑数
  4. 关于手机的三大谣传 千万不可信
  5. 第0章 计算机硬件与组成基础
  6. PR调色 300婚礼视频调色视频颜色校正PR调色预设包
  7. C语言指针-什么是指针,如何引用指针
  8. 浙大计算机专业博士后,博士后 - 浙江大学系统医学研究中心
  9. alex机器人 ser_机器人抓取时怎么定位的?用什么传感器来检测?
  10. CACTI :有图无数据解决办法