如何统计一组数据

bigo808 2006-12-05 02:10:32
例子如下:
abc表有两个列值:“ID”(自动编号)和“值”。
其中“值”的取值为字符“0”和“1”的随机排列。数据10W个.
“值”排列【示例1】01011000101101111110111
统计规则如下:
1.
统计对象判断-排列与“000”(就是出现连续三个0的情况)相吻合的情况,结果有“是”“非”两种情况。
其中“是”的情况为:【示例1】的第一个字符(注:得出“是”“非”结果之后的后面第一个字符)“0”与“000”的第一个字符对比,它们相符,则判断为“是”,该轮判断结束。紧接着取后面的第一个值“1”与“000”的第一个字符对比,它们不相符,这时就取“1”后面的值“0”与“000”的第二个字符对比,它们相符,则判断为“是”.如此类推,当第三个取值依旧与“000”的第三个字符不相符时判断为“非”。
【示例1】
0 10 110 0 0 10 110 111 111 0 111
是是 是 是 是 是 是 非 非 是 非

2.
统计的级数:
1级-起始级数,
2级
3级
4级
5级
6级
7级
8级
9级
10级
11级
12级
根据统计规则1,当判断结果为“非”时,上升一级。
根据统计规则1,当某级数的判断结果为“是”达5次(按级数累计)时,下降一层{第一级不适合此规则}。
当级数刚刚上升到12级时,第一轮统计结束。从下一个字符开始,进行第二轮统计,结果与前面的统计结果累加。

3.
统计的对象1--累加统计各个级数中出现的“非”的次数(分级显示)。
统计的对象2--统计到达第12级的次数。
====

求教!
...全文
370 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
Godsaidlwq 2006-12-07
  • 打赏
  • 举报
回复
不明白什么意思,能不能举个例子
Godsaidlwq 2006-12-07
  • 打赏
  • 举报
回复
那就把现有表名改成database.user.table
wendyc 2006-12-07
  • 打赏
  • 举报
回复
收藏 先
bigo808 2006-12-06
  • 打赏
  • 举报
回复
测试中!
Godsaidlwq 2006-12-06
  • 打赏
  • 举报
回复
create table tmp_t
(
id int identity,
tmp varchar(40)
)

declare @iStr varchar(30)
,@i int
,@j int

set @i = 1
set @j = 1
set @iStr = ''

while @i <=100
begin
while @j <=30
begin
select @iStr = @iStr + cast(cast(rand()*100 as int)%2 as varchar(1))
set @j=@j+1
end
insert into tmp_t(tmp)
select @iStr
set @iStr=''
set @j=1
set @i =@i+1
end

--truncate table tmp_t
--select * from tmp_t

select identity(int,1,1) as id,replace(replace(replace(tmp,'111','非'),'1',''),'0','是') as tmp
into tmp_t_2
from tmp_t

--select * from tmp_t_2

create table tmp_r
(
id int,
N int default 0,
Y int default 0
)

insert into tmp_r(id)
select '1'
union all
select '2'
union all
select '3'
union all
select '4'
union all
select '5'
union all
select '6'
union all
select '7'
union all
select '8'
union all
select '9'
union all
select '10'
union all
select '11'
union all
select '12'

GO

--select * from tmp_t_2
--select * from tmp_r

declare @i int,
@m int,
@j int,
@z varchar(4),
@str varchar(40),
@str2 varchar(20)

set @i = 1
set @m = 0
set @j = 1
set @str2 = ''

while @j <= (select count(1) from tmp_t_2)
begin
select @str = tmp from tmp_t_2 where id = @j
while len(@str)>0
begin
set @z = left(@str,1)
if @z = '非'
begin
if @i <12
begin
update tmp_r set N = N + 1 where id = @i
set @i = @i +1
end
else
begin
update tmp_r set N = N + 1 where id = 12
set @i = 1
end
end
else if @z = '是'
begin
select @m = Y from tmp_r where id = @i
set @str2 = @str2+'是'
if len(@str2)= 5
begin
update tmp_r set Y=0 where id =@i
if @i>1
begin
set @i = @i -1
end
set @str2 = ''
end
else if (@m+len(@str2))=5
begin
update tmp_r set Y=0 where id =@i
if @i>1
begin
set @i = @i -1
end
set @str2 = ''
end
else if (@m+len(@str2))<5
begin
update tmp_r set Y = (@m+len(@str2)) where id =@i
end
end
set @str = stuff(@str,1,1,'')
end
set @j = @j +1
end

select * from tmp_r

GO



drop table tmp_t
drop table tmp_t_2
drop table tmp_r

result:
--------------
1 108 4
2 51 0
3 19 3
4 13 0
5 10 0
6 5 0
7 5 0
8 5 0
9 0 0
10 0 0
11 0 0
12 0 0
bigo808 2006-12-06
  • 打赏
  • 举报
回复
Godsaidlwq老大,是否可以设计成:
数据从已有的数据库A下的表B 的字段C的值读取呢?以便检验程式
谢谢!
bigo808 2006-12-06
  • 打赏
  • 举报
回复
1、是否在出现一个'非'以后才累计'是'的个数?
两者统计没有先后之分,每一级上的“是”最多只有5个,累计达到五个“是”后该级“是”的统计次数变为0,之后指针降一级.
2、出现'非'以后因为'是'的个数很多再次回到1级,而此刻再次出现是是否累加?
升级动作:该级“新”出现一个“非”,立即上升一级。
=====
关于“是”“非”判断以及升降级实例如下:
以下数据排列是111010110111110010011111101110101100110010010010110011000111010010110.....
=====拆散来示例
位于第一级
111非
上升到第二级
0是
10是
110是
111非
上升到第三级
110是
0是
10是
0是
111非
上升到第四级
111非
上升到第五级
0是
111非
上升到第六级
0是
10是
110是
0是
110是
下降到第五级
0是
10是
0是
10是(新出现4个“是”,加原来的1个“是”,总共5个)
下降到第四级
0是
10是
110是
0是
110是(原来没有1个“是”)
下降到第三级
0是(新出现1个“是”,原来有4个“是”,总共5个)
下降到第二级
0是
111非(新出现1个“是”,原来3个“是”,总共4个,不够5个,不能下降)
上升到第三级
0是
10是
0是
10是
110是(新出现5个“是”)
下降到第二级
.....
.....

Hinco 2006-12-06
  • 打赏
  • 举报
回复
给一个当等级为1时不记数的方法
--统计达到12级的次数
set @outtime=0
set @i=1
set @level=1
while @i<=len(@isnotlist)
begin
set @level=@level+(case substring(@isnotlist,@i,1) when '是'
then -0.2*(case @level when 1 then 0 else 1 end) else 1 end)
if CEILING(@level)=12
begin
set @level=1
set @outtime=@outtime+1
end
end
print @outtime
Hinco 2006-12-06
  • 打赏
  • 举报
回复
有两个问题不明确
1、是否在出现一个'非'以后才累计'是'的个数?
2、出现'非'以后因为'是'的个数很多再次回到1级,而此刻再次出现是是否累加?例:'非是是是是是是是非是是是'的等级是2还是1?另:'非是是是是是是是是是是是是非非是是是'是1、2还是3?
12等级出现次数需要明确上面两个问题才好计算
declare @data varchar(8000)
declare @isnotlist varchar(8000)
declare @notcount int
set @data='01011000101101111110111'
--是非排列
set @isnotlist=replace(replace(replace(@data,'111','非'),'1',''),0,'是')
print @isnotlist
--'非'总数计算
set @notcount=len(replace(@isnotlist,'是',''))
print @notcount
bigo808 2006-12-05
  • 打赏
  • 举报
回复
可惜我不懂sql编程,只会一点点execl的编程,不过execl中处理数据太慢了。
上面例子在execl可以用编程实现。
bigo808 2006-12-05
  • 打赏
  • 举报
回复
可能我的表达有问题!
由于列值“值”只能取值0和1,随机排列,那么它在较大的一个样本中(例如10w)中的全排列(只存在)为000,111,011,100,001,110,101,010八种。
如果研究对象是“000”,那么“111”相对“000”就是“非”,其它7种000,011,100,001,110,101,010都是“是”。后面七种都至少有一个字符是与“000”对应位子的字符是相对应的拉。
zhang_yzy 2006-12-05
  • 打赏
  • 举报
回复
好复杂呀,老大
zzxiaoma 2006-12-05
  • 打赏
  • 举报
回复
还是没看懂
bigo808 2006-12-05
  • 打赏
  • 举报
回复
急切等待中!
bigo808 2006-12-05
  • 打赏
  • 举报
回复
可能这个属于二维统计?
bigo808 2006-12-05
  • 打赏
  • 举报
回复
举个例子:
第1级为起始级数,当在这个级数中出现一次“非”时,上升到第2级,第1级的“非”的统计次数由0次变为1次。
上升到第2级之后,先出现了2个“是”,紧接着出现一个“非”,上升到第3级,第2级“是”的统计次数为2次,第2级“非”的统计次数+1次。
上升到第3级之后,先出现了3个“是”,紧接着出现一个“非”,上升到第4级,第3级“是”的统计次数为3次,第3级“非”的统计次数+1次。
上升到第4级之后,连续出现5个“是”,则下降到第3级,由于没有出现“非”,第4级“非”的统计次数不加也不减,由于是下降到第3级,第4级“是”的统计次数由5变为0次。
下降到第3级之后,又出现了2个“是”,累计原来出现的3个“是”,“是”的总数为5,则下降一级,下降到第2级.第3级“是”的总数由5次变为0次。
下降到第2级之后,又先出现了1个“是”,累计原来出现的2个“是”,“是”的总数为3,还未达到下降的累计5次“是”的条件。在这时,又出现了一次“非”,那么上升到第3级。
==
以此类推,反复上升下降,反复统计级数相对应出现的“非”的次数。
当级数刚刚上升到12级时(该级还没有一次“是”,也没有一次“非”),第一轮统计结束,各个级数的“是”的统计次数变回0次。
从数据库的下一个字符开始,进行第二轮统计。每轮统计的与级数相对应出现的“非”的次数类加,一直到统计完该数据库的所有数据。
==
谢谢!
tanweibiao2000 2006-12-05
  • 打赏
  • 举报
回复
沒看懂
marco08 2006-12-05
  • 打赏
  • 举报
回复
沒看懂
Godsaidlwq 2006-12-05
  • 打赏
  • 举报
回复
可不可以把第2个规则再说得清楚一点!

zzxiaoma 2006-12-05
  • 打赏
  • 举报
回复
关注
一. 课程介绍本课程结合Python进行统计数据分析的原理讲解与实战,涵盖了大部分统计&数据分析模型,特别是当前比较主流的算法:参数估计、假设检验、线性回归、广义线性回归、Lasso、岭回归、广义可加模型、回归样条等;机器学习经常用到的主成分分析、因子分析、典型相关分析、聚类分析等;各种非参数统计模型,包括非参数统计推断、尺度推断、位置推断、非参数核密度估计、非参数回归等。本课程主要针对有一定Python编程基础、即将毕业参加工作的的大三大四学生,或者已经参加工作需要提升自己数据分析能力以及转行从事IT行业尤其是数据&大数据分析工作的初入职场者,或者正在攻读硕博士学位需要学习和掌握量化研究方法的研究生。本课程对于即将从事机器学习、深度学习&人工智能相关工作的程序员也有很大帮助,有利于打好坚实的理论基础。二. 课程目录第0章 课程导学第1章 数据描述性分析1.1 描述统计量1.2 数据的分布1.3 概率分布函数的图形1.4 直方图、经验分布函数与QQ图1.5 多元数据数据特征与相关性分析1.6 多元数据的基本图形表示第2章 参数估计2.1 点估计2.2 区间估计第3章 假设检验3.1 基本原理3.2 参数检验第4章 回归分析4.1 回归分析的概念与一元线性回归4.2 多元线性回归及统计量解析4.3 逐步回归与模型选择4.4 回归诊断4.5 广义线性回归4.6 非线性回归第5章 方差分析5.1 单因素方差分析5.2 双因素方差分析第6章 判别分析与聚类分析6.1 判别分析6.2 聚类分析第7章 主成分分析、因子分析与典型相关分析7.1 主成分分析7.2 因子分析7.3 典型相关分析第8章 非参数统计8.1 经验分布和分布探索8.2 单样本非参数统计推断8.3 两独立样本的位置与尺度判断8.4 多组数据位置推断8.5 分类数据的关联分析8.6 秩相关与分位数回归8.7 非参数密度估计8.8 一元非参数回归三. 讲师简介主讲人李进华博士,本、硕、博皆就读于武汉大学信息管理学院,2005年获博士学位进入211高校任教,2012年受聘为教授。从事信息管理与数据分析方面的教学、科研与系统开发工作20余年,具备深厚理论修养和丰富实战经验。是中国最早从事Java开发的程序员和Oracle数据库的DBA之一。曾带领团队开发《葛洲坝集团三峡工程指挥中心三期工程施工管理系统》、《湖北省财政厅国有企事业单位资产管理系统》等大型MIS。

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧