关于sqlServer2005的学习笔记——统计学自动分组问题
学过统计学或者做过BI的应该知道,很多报表需要以区间统计的方式来实现,怎么分组比较合理,什么的组距比较合适,会困扰很多人;本文给出一个自动分组的方法,稍微修改一下,便可以做成通用区间分组程序。
http://wiki.mbalib.com/wiki/%E7%BB%84%E8%B7%9D%E5%88%86%E7%BB%84
第一步:确定组数。一组数据分多少组合适呢?一般与数据本身的特点及数据的多少有关。由于分组的目的之一是为了观察数据分布的特征,因此组数的多少应适中。如组数太少,数据的分布就会过于集中,组数太多,数据的分布就会过于分散,这都不便于观察数据分布的特征和规律。组数的确定应以能够显示数据的分布特征和规律为目的。在实际分组时,可以按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<e.GroupNum ) --第四步,根据频数表和原表进行相关区间统计 SELECTMinGroup,MaxGroup,count(*) FROMAutoGroup a,GroupStandard b WHEREa.age>=b.MinGroupANDa.age<b.MaxGroup GROUPBYMinGroup,MaxGroup |
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。