关于SQLServer2005的学习笔记――统计学自动分组问题
发布时间:2020-12-12 15:25:06 所属栏目:MsSql教程 来源:网络整理
导读:??? 学过统计学或者做过 BI 的应该知道,很多报表 需要以区间统计的方式来实现,怎么分组比较合理,什么的组距比较合适,会困扰很多人;本文给出一个自动分组的方法,稍微修改一下,便可以做成通用区间分组程序。 关于统计学组距分组参考以下链接: http://w
??? 学过统计学或者做过 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 ) -- 第四步,根据频数表和原表进行相关区间统计 SELECT MinGroup,count (*) ? FROM AutoGroup a,GroupStandard b ? WHERE a. age>= b. MinGroupAND a. age< b. MaxGroup ? GROUP BY MinGroup,MaxGroup ? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
- sql-server – 管道/ veritcal bar字符在TSQL中意
- sql-server-2008-r2 – 在Excel 2010中输入SQL S
- 监控 – Munin – 从数据库加载旧/历史数据以预先
- 在 sqlserver2000 中现实table里的行号
- 防止SQLSERVER的事件探查器跟踪软件
- sql – 如何在“Where”子句中使用“and”和“or
- SQL Server SQL 统计一个数据库中所有表记录的数
- SQL Server 2008 密钥 key 使用方法
- SqlServer四个排名函数(row_number、rank、dens
- sql – 如何在单个ALTER TABLE中添加和删除列
热点阅读