ORALC的STDDEV、STDDEV_POP、STDDEV_SAMP等函数

简介:

今天一个同事碰到一个问题:用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 CNT
     FROM 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)
相关文章
C#学习相关系列之多线程---ConfigureAwait的用法
C#学习相关系列之多线程---ConfigureAwait的用法
721 0
|
存储 数据中心
什么是T3机房?T1/T2/T3/T4机房等级对比详解
我们在购买IDC服务时都会选择T3机房或者T4机房,那么什么是T3机房?T3机房和T4机房有什么区别?服务器百科网来说说T1/T2/T3/T4机房等级对比详解: IDC机房等级划分 IDC机房的等级划分是根据《数据中心电信基础设施标准》而定的,它是美国国家标准学会(ANSI)颁布的,它将IDC数据中心(大型的设备和管理都比较完善的机房可以称为数据中心)基础设施的可用性定义了四种不同等级,即Tier 1、Tier 2、Tier 3和Tier 4四个等级。
20536 0
|
9月前
|
存储 分布式计算 大数据
【赵渝强老师】阿里云大数据存储计算服务:MaxCompute
阿里云MaxCompute是快速、全托管的TB/PB级数据仓库解决方案,提供海量数据存储与计算服务。支持多种计算模型,适用于大规模离线数据分析,具备高安全性、低成本、易用性强等特点,助力企业高效处理大数据。
448 0
|
存储 人工智能 关系型数据库
《深度揭秘:借助MySQL实现AI模型训练全程追溯》
在AI模型训练中,记录训练过程与参数至关重要,有助于优化模型、促进团队协作及问题排查。MySQL凭借强大的数据管理能力,可高效存储和处理结构化数据,确保一致性与完整性。通过设计合理的表结构(如模型信息表、训练记录表等),结合规范的记录流程,能有效支持大规模AI项目。然而,也需应对数据量增长、一致性维护和数据安全等挑战,以充分发挥MySQL的优势,推动AI技术发展。
412 29
|
安全 量子技术 数据安全/隐私保护
量子通信:构建安全通信网络的未来
【9月更文挑战第21天】量子通信作为信息时代的一次伟大飞跃,正引领我们迈向一个全新的安全通信纪元。其独特的绝对安全性、高效率和大容量特点,使得量子通信在构建未来安全通信网络中具有不可替代的作用。随着技术的不断发展和应用的不断拓展,我们有理由期待量子通信将在未来发挥更加重要的作用,为人类社会的信息安全保驾护航。
432 14
|
9月前
|
人工智能 自动驾驶 大数据
“AI再聪明,也得靠大数据喂饱它”:聊聊大数据与人工智能的双剑合璧
“AI再聪明,也得靠大数据喂饱它”:聊聊大数据与人工智能的双剑合璧
442 2
|
关系型数据库 MySQL 数据库
【MySQL基础篇】MySQL概述、Windows下载MySQL8.0超详细图文安装教程
在这一章节,主要介绍两个部分,数据库相关概念及MySQL数据库的介绍、下载、安装、启动及连接。接着,详细描述了MySQL 8.0的版本选择与下载,推荐使用社区版(免费)。安装过程包括自定义安装路径、配置环境变量、启动和停止服务、以及客户端连接测试。此外,还提供了在同一台电脑上安装多个MySQL版本的方法及卸载步骤。最后,解释了关系型数据库(RDBMS)的特点,即基于二维表存储数据,使用SQL语言进行操作,格式统一且便于维护。通过具体的结构图展示了MySQL的数据模型,说明了数据库服务器、数据库、表和记录之间的层次关系。
2368 56
【MySQL基础篇】MySQL概述、Windows下载MySQL8.0超详细图文安装教程
|
SQL JavaScript 前端开发
Hive学习-lateral view 、explode、reflect和窗口函数
Hive学习-lateral view 、explode、reflect和窗口函数
1015 4
|
运维 Linux Docker
安装Harbor镜像仓库
本文介绍了如何在Linux系统上安装和配置Harbor镜像仓库。首先通过阿里云镜像源安装Docker,然后下载并解压Harbor离线安装包。配置Harbor服务的相关参数。最后,通过运行安装脚本完成Harbor的安装,并进行基本的测试,包括登录、构建和推送Docker镜像。文章还提供了相关资源链接,方便读者进一步了解和学习。
1964 2
|
Python
pandas包的安装和Could not find a version that satisfies|9
pandas包的安装和Could not find a version that satisfies|9
979 8