今天一个同事碰到一个问题:用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 ) ;
 
--方法2SELECT 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)

作者:潇湘隐者
出处:http://www.cnblogs.com/kerrycode/

ORALC/HIVE 的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的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. hive(3)——在hive中使用自己写的函数(python实现)

    如果我们想在hive中添加自己写的函数,可用如下方法: 前提:已经开启hdfs,yarn服务,并且关闭safe模式,打开mysql ps:udf是mapper类型的,进来一个数据,出去一个数据 (1) ...

  7. Hive _偏门常用查询函数(三)附带实例(Rank)

    接上两篇博客 Hive _偏门常用查询函数(一)附带实例 https://blog.csdn.net/qq_41946557/article/details/102904642 Hive _偏门常用查 ...

  8. Hive _偏门常用查询函数(二)附带实例(列转行、窗口函数)

    接上篇博客: Hive _偏门常用查询函数(一)附带实例 https://blog.csdn.net/qq_41946557/article/details/102904642 列转行 1.函数说明 ...

  9. Hive 处理 json 的几个函数

    本文参考:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF get_json_object hive中解析一般的j ...

最新文章

  1. 从零开始入门 K8s | K8s 安全之访问控制
  2. keil5改工程名称_修改Keil工程名称并添加其他模块文件
  3. 你真的了解Maven pom.xml 的配置吗?【详解maven pom】
  4. 奥巴马经济顾问:哪怕丢了“饭碗”,也必须加大投资AI!
  5. postgresql 遍历字符串数组_每日一道编程题(348):1005.K次取反后最大化的数组和...
  6. dbf文件怎么创建_ThinkPHP6开发博客实战入门(三),创建admin后台入口
  7. 教育大数据隐私保护机制与技术研究
  8. UI_布局_总体思路
  9. 我为什么坚持写博客?
  10. 【图像分割】基于matlab超像素SFFCM图像分割【含Matlab源码 1374期】
  11. 解压vmlinuz和解压initrd(initramfs)
  12. 详细了解 clientWidth、clientHeight、clientLeft、clientTop 以及几个常用的场景
  13. 计算机桌面变小了是怎么回事啊,电脑桌面整体变小了要怎么调回来的
  14. 封头名义厚度如何圆整_封头规格
  15. Dockerfile 命令详解
  16. EZ USB Suite工程导入
  17. 06512oracle数据库,记一次ORA-06512、ORA-29283
  18. 2015年腾讯游戏策划岗位笔试题目
  19. IIC,SPI,UART,单总线
  20. WPS表格 - 数字累加技巧总结

热门文章

  1. 信息安全等保项目解读
  2. EMQX数据持久化到mysql
  3. python中if语句and和or用法_Python从入门到精通——一文读懂if语句用法
  4. ESP8266开发之旅 阿里云物联网平台篇⑤ LED智能灯控制系统(使用HTTPS认证再连接)
  5. js实现点击按钮图片自动切换_☆往事随風☆的博客
  6. 【机器翻译】【mRASP】跑通mRASP代码(一):preprocess
  7. 武士与魔王游戏v2.0
  8. 关于ORACLE_SQL,都在这里了!!!
  9. 计算机画图学生作品小学,小学电脑绘画作品的指导
  10. 包载羟基喜树碱的聚乙二醇化聚十六烷基氰基丙烯酸酯(PEG-PHDCA)纳米囊泡