[SQL Server 2005]统计学自动分组问题

统计学自动分组问题

 

学过统计学或者做过 BI 的应该知道,很多报表 需要以区间统计的方式来实现,怎么分组比较合理,什么的组距比较合适,会困扰很多人;本文给出一个自动分组的方法,稍微修改一下,便可以做成通用区间分组程序。

关于统计学组距分组参考以下链接:

http://wiki.mbalib.com/wiki/%E7%BB%84%E8%B7%9D%E5%88%86%E7%BB%84

 

第一步: 确定组数。一组数据分多少组合适呢?一般与数据本身的特点及数据的多少有关。由于分组的目的之一是为了观察数据分布的特征,因此组数的多少应适中。如组数太少,数据 的分布就会过于集中,组数太多,数据的分布就会过于分散,这都不便于观察数据分布的特征和规律。组数的确定应以能够显示数据的分布特征和规律为目的。在实 际分组时,可以按 Sturges 提出的经验公式来确定组数 K

k= 1 + log(n) / log(2) 

 

 

第二步: 确定各组的组距

组距 =(Max(Value)-Min(Value))/K

 

第三步: 根据分组整理成频数分布表.

 

以下为一个例子: 源数据为的一批杂乱的年龄数据, 统计的结果为“各个年龄段的人数”.

 

-- 创建表和数据

CREATE TABLE AutoGroup(Age INT);

INSERT INTO AutoGroup VALUES(12);

INSERT INTO AutoGroup VALUES(10);

INSERT INTO AutoGroup VALUES(20);

INSERT INTO AutoGroup VALUES(25);

INSERT INTO AutoGroup VALUES(27);

INSERT INTO AutoGroup VALUES(30);

INSERT INTO AutoGroup VALUES(50);

INSERT INTO AutoGroup VALUES(60);

INSERT INTO AutoGroup VALUES(45);

INSERT INTO AutoGroup VALUES(46);

INSERT INTO AutoGroup VALUES(35);

INSERT INTO AutoGroup VALUES(30);

INSERT INTO AutoGroup VALUES(47);

INSERT INTO AutoGroup VALUES(20);

INSERT INTO AutoGroup VALUES(61);

--SELECT age FROM AutoGroup

 

-- 第一步,获取最大值、最小值、以及记录数量

WITH MaxAndMin AS

(SELECT MAX(age) MaxNum,MIN(age) MinNum,COUNT(*) CountNum FROM AutoGroup),

 

-- 第二步,确定组数和组距。

GroupStep AS

(SELECT MaxNum,MinNum,CountNum, CEILING (1+LOG(CountNum)/LOG(2)) GroupNum,

        CEILING(CEILING(MaxNum-MinNum)/CEILING(1+LOG(CountNum)/LOG(2))) GroupStep

   FROM MaxAndMin),

 

-- 第三步,递归生成相应的频数分布表

GroupStandard(MinGroup,MaxGroup,Identiy) AS

( SELECT e.MinNum MinGroup,e.MinNum+e.GroupStep MaxGroup,1 AS Identiy

    FROM  GroupStep AS e

   UNION ALL

  SELECT CAST(e.MinNum+e.GroupStep*identiy AS INT) MinGroup,

         e.MinNum+e.GroupStep*(Identiy+1) MaxGroup, Identiy+1 c

    FROM  GroupStep AS e,GroupStandard d

   WHERE d.Identiy<e.GroupNum

)

 

-- 第四步,根据频数表和原表进行相关区间统计

SELECT MinGroup MinAge, MaxGroup MaxAge, count (*) amount

  FROM AutoGroup a, GroupStandard b

  WHERE a.age>= b.MinGroup AND a.age < b.MaxGroup

  GROUP BY MinGroup, MaxGroup

 

 

-- 返回的结果集为:

MinAge  MaxAge   amount

10       21       4
21       32       4
32       43       1
43       54       4
54       65       2

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值