ORACLE分组函数stddev和variance,我心存的疑问

方差函数VARIANCE(x),
具体方法是: 
设方差s,a为x1,x2...xn的平均值 ,
则s = [(x1-a)^2+(x2-a)^2+(x3-a)^2+……(xn-a)^2]/n

标准差函数STDDEV(x),
具体算法是: 
方差开方。
设标准查为& ,则 &^2 = s

但是我通过以下的实验,发现oracle是这样计算variance()的, 
s = [(x1-a)^2+(x2-a)^2+(x3-a)^2+……(xn-a)^2]/n-1 ,注意不是除以n,而是n-1 
-----------------------------------------------------------------------------------
实验:
create table TEST_STDDEV_VARIANCE(col1 number(9,2),col2 number(9,2)) ;
insert into TEST_STDDEV_VARIANCE values(1,1) ;
insert into TEST_STDDEV_VARIANCE values(2,3) ;
insert into TEST_STDDEV_VARIANCE values(3,9) ;
insert into TEST_STDDEV_VARIANCE values(4,15) ;
SELECT * FROM TEST_STDDEV_VARIANCE ;
COL1   COL2
-----  -----
1           1
2           3
3           9
4           15

SELECT VARIANCE(COL1) ,VARIANCE(COL2) FROM TEST_STDDEV_VARIANCE ;
VARIANCE(COL1)                            VARIANCE(COL2)
----------------------------------------       --------
1.66666666666666666666666666666666666667           40

SELECT STDDEV(COL1) ,STDDEV(COL2) FROM TEST_STDDEV_VARIANCE ;
STDDEV(COL1)                                        STDDEV(COL2) 
--------------------------------------------------       --------
1.29099444873580562839308846659413320361                 6.32455532033675866399778708886543706744

注意VARIANCE(COL1)=(1.5^2 + 0.5^2 + 0.5^2 + 1.5^2) /3 = 5/3 =1.66666666666666666666666666666666666667
而如果按照方差公式计算应该是VARIANCE(COL1)=(1.5^2 + 0.5^2 + 0.5^2 + 1.5^2) /4 =5/4=1.25
为什么oracle的分组函数的计算公式不是[(x1-a)^2+(x2-a)^2+(x3-a)^2+……(xn-a)^2]/n ,而是
s = [(x1-a)^2+(x2-a)^2+(x3-a)^2+……(xn-a)^2]/n-1  呢,真有点疑问,有知道的高手请指点。

时间: 2024-10-14 05:55:47

ORACLE分组函数stddev和variance,我心存的疑问的相关文章

oracle 分组函数、视图

组函数 分组函数作用于一组数据,对每一组返回一个值 组函数类型: 1.计数        count(列名 或 表达式)     对满足的行数进行统计 2.求和        sum(列名 或 表达式)       对数据进行和值计算,如 sum(grade) 计算总成绩 3.平均值    avg(列名 或 表达式)        对数据进行均值计算,如avg(grade)计算平均成绩 4.最大值    max(列名 或 表达式)       筛选最大的数据,如max(sum(grade))筛选

[转]【ROLLUP】Oracle分组函数之ROLLUP魅力

原创:http://blog.itpub.net/519536/viewspace-610995 本文通过演示给出Oracle ROLLUP分组函数的用法,体验一下Oracle在统计查询领域中的函数魅力.ROLLUP分组函数可以理解为Group By分组函数封装后的精简用法,这里同时给出ROLLUP的Group By的改写思路. 1.初始化实验坏境1)创建测试表group_test[email protected]> create table group_test (group_id int,

oracle分组函数

分组函数:作用于一组值,并对一组数据返回一个值: 分组函数的使用: 常用的分组函数: Avg(求平均值),sum(求总和),min(求最小值),max(求最大值),count(求总个数),wm_concat(行转列) 例:select count( distinct deptno) from emp ; 行转列: select deptno 部门号,wm_concat(ename) 部门中员工的名字  from emp group by deptno; ---------------------

Oracle分组函数之ROLLUP

功能介绍: 首先是进行无字段的聚合,然后在对字段进行从左到右依次组合后聚合 创建表: 1 Create Table score 2 ( 3 classID Int, 4 studentName Varchar2(50), 5 subject varchar2(50), 6 score Int 7 ); 插入测试数据: 1 Insert Into score values (001,'小徐','语文',87); 2 Insert Into score values (001,'小徐','数学',9

[SQL]-Oracle分组函数ROULLUP的应用

首先部分说明: Oracle的GROUP BY语句除了最基本的语法外,还支持ROLLUP和CUBE语句.如果是Group by ROLLUP(A, B, C)的话,首先会对(A.B.C)进行GROUP BY,然后对(A.B)进行GROUP BY,然后是(A)进行GROUP BY,最后对全表进行GROUP BY操作. 因工作要做个报表,因此想就在数据库直接跑个报表出来,取公司部分数据整理如下: SELECT CLP.ITEMNAME AS PORVINCE, CLC.ITEMNAME AS CIT

Oracle——分组函数

AVG(平均值)和 SUM (合计)函数 可以对数值型数据使用AVG 和 SUM 函数. AVG组函数忽略空值 --在组函数中使用NVL函数 --求平均值 sum(expr)/count(nvl(expr,0)) MIN(最小值)和 MAX(最大值)函数 可以对任意数据类型的数据使用 MIN 和 MAX 函数. SELECT MIN(hire_date), MAX(hire_date) FROM employees; COUNT(*) 返回表中记录总数,适用于任意数据类型. SELECT COU

Oracle分组函数cube VS rollup

分析函数cube和rollup魅力首先请看下面例子1)创建表create table group_test (group_id int, job varchar2(10), name varchar2(10), salary int);2)初始化表insert into group_test values (10,'Coding', 'Bruce',1000);insert into group_test values (10,'Programmer','Clair',1000);insert

Oracle分组函数之Grouping Sets

功能介绍: 自定义分组的字段 创建表: 插入测试数据: Grouping Sets(null,t.classid,(t.classid,t.studentname)),类似于ROLLUP Select t.classid,t.studentname,Sum(t.score) From Score t Group By Grouping Sets(null,t.classid,(t.classid,t.studentname)); 查询结果: Grouping Sets(null,t.classi

Oracle分组函数之CUBE

功能介绍: 首先是进行无字段的聚合,然后依次对每个字段进行聚合 创建表: 插入测试数据: ROLLUP: Select t.classid,t.studentname,Sum(t.score) From Score t Group By Rollup(t.classid,t.studentname); 查询结果: Cube: Select t.classid,t.studentname,Sum(t.score) From Score t Group By Cube(t.classid,t.stu