Chinaunix首页 | 论坛 | 博客
  • 博客访问: 167424
  • 博文数量: 103
  • 博客积分: 2251
  • 博客等级: 大尉
  • 技术积分: 1095
  • 用 户 组: 普通用户
  • 注册时间: 2007-04-03 11:15
文章分类

全部博文(103)

文章存档

2011年(103)

分类: 数据库开发技术

2011-05-04 23:05:59

关于SQLServer2005的学习笔记——统计学自动分组问题

 

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

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

 

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

第二步:确定各组的组距

组距=(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

)

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

SELECTMinGroup,MaxGroup,count(*)

 FROMAutoGroup a,GroupStandard b

 WHEREa.age>=b.MinGroupANDa.age<b.MaxGroup

 GROUPBYMinGroup,MaxGroup

 

 

阅读(305) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~