理解数据库的统计集聚函数

ZDNet软件频道 时间:2003-04-24 作者:BUILDER.COM |  我要评论()
本文关键词:
为了选用正确的函数,你必须详细地了解现在Oracle SQL中用到的一系列集聚函数。
本文译自Builder.com,未经许可请勿转载为了选用正确的函数,你必须详细地了解现在Oracle SQL中用到的一系列集聚函数。Oracle8和Oracle9都支持的函数包括:

  • AVG
  • CORR
  • COUNT
  • COVAR_POP
  • COVAR_SAMP
  • MAX
  • MIN
  • REGR_<function>
  • STDDEV
  • STDDEV_POP
  • STDDEV_SAMP
  • SUM
  • VAR_POP
  • VAR_SAMP
  • VARIANCE
     

几乎所有的集聚函数都将忽略那些NULL列。但是有一个例外,那就是COUNT(*),这个函数将计算所有的纪录而不管是否存在NULL列。在一般集聚函数所有数据都为NULL时,集聚函数的返回值为NULL,但是COUNT(col)的返回值为零。

MIN函数和MAX函数

MIN函数和MAX函数根据排序后返回最小值和最大值。你应该明白那些函数都是基于对它们的数据类型的排序结果。为了避免排序错误,日期和数字都必须定义为与其对应的数据类型。例如,MAX(TO_CHAR(date))会把1月排在2月之前。

STDDEV,STDDEV_POP,STDDEV_SAMP和VARIANCE,VAR_POP,VAR_SAMP

标准差和方差是衡量数据扩散范围的标准。如果一列中的数据都相同的话,那么标准差和方差就为零。在实际情况中,标准差描述的是反映平均值的一个锥形曲线。对于现实世界人口,有68%的数据应在一个标准差之内,96%的数据应在2个标准差之内。

据统计表明:人口的样本方差并不能很好的反映整体人口的方差,这个事实就决定了存在3个标准差函数和3个方差函数。通过以下的SQL脚本来看看它的作用:

drop table agg;
create table agg(n integer);
begin
    for i in 0..1000 loop
        insert into agg values(i);
    end loop;
end;
/
show errors;
select 'Population' d,count(n),avg(n),stddev(n),stddev_pop(n),stddev_samp(n)
  from agg
union
select 'Sample',count(n),avg(n),stddev(n),stddev_pop(n),stddev_samp(n)
  from agg where mod(n,2) = 0
union
select 'Sample',count(n),avg(n),stddev(n),stddev_pop(n),stddev_samp(n)
  from agg where mod(n,10) = 0
union
select 'Sample',count(n),avg(n),stddev(n),stddev_pop(n),stddev_samp(n)
  from agg where mod(n,100) = 0;

得到的结果是

虽然这些数据是人为计算得到的,并没有在此锥形曲线上,但是这个例子反映了_SAMP和_POP的差别。从这个例子看出,样本的STDDEV_POP(N)列的数据比样本的STDDE(N)列数据更接近实际的STDDECV(N)列数据。

因此,当你应用STDDEV函数时,认真考虑你处理的是什么数据是非常重要的。如果你想得到一些数据的真实标准差,那么你就应该用STDDEV_SAMP。如果你只是处理一些小型的抽样样本,只希望得到人口标准差的近似值的话,那么你应该用STDDEV_POP。

VAR_SAMP就是STDDEV_SAMP的平方,相似的VAR_POP就是STDDEV_POP的平方。这两个函数并不常用,原因是他们的成员都是带平方的。


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134