双色球得一些基础分析[sql]

本文介绍了一种使用SQL Server进行彩票数据统计分析的方法,通过构建数据库表并运用SQL查询来分析彩票号码的单双分布、号码出现频率及连续性特征。

代码是心血来潮编写得,就象买彩票一样,为国家做贡献;
首先建立一个表,表得数据可以从 福利彩票网站上获得,自己一个一个得录入进去先;

表结构为:

None.gif if exists ( select * from dbo.sysobjects where id = object_id(N ' [dbo].[tbSrcData] ') and OBJECTPROPERTY(id, N ' IsUserTable ') = 1)
None.gif drop table [ dbo ]. [ tbSrcData ]
None.gif GO
None.gif
None.gif CREATE TABLE [ dbo ]. [ tbSrcData ] (
None.gif [ Q ] [ varchar ] ( 10) NOT NULL , -- 期数
None.gif
[ F1 ] [ int ] NULL , -- 1号球数
None.gif
[ F2 ] [ int ] NULL , -- 2号球数
None.gif
[ F3 ] [ int ] NULL , -- 3号球数
None.gif
[ F4 ] [ int ] NULL , -- 4号球数
None.gif
[ F5 ] [ int ] NULL , -- 5号球数
None.gif
[ F6 ] [ int ] NULL , -- 6号球数
None.gif
[ F7 ] [ int ] NULL , -- 7号兰球数
None.gif
[ FXQT ] [ int ] NULL -- 快乐星期天球数
None.gif
) ON [ PRIMARY ]
None.gif GO
None.gif
None.gif ALTER TABLE [ dbo ]. [ tbSrcData ] WITH NOCHECK ADD
None.gif CONSTRAINT [ PK_tbSrcData ] PRIMARY KEY CLUSTERED
None.gif (
None.gif [ Q ]
None.gif ) ON [ PRIMARY ]
None.gif GO
None.gif
None.gif CREATE UNIQUE INDEX [ IX_tbSrcData ] ON [ dbo ]. [ tbSrcData ]( [ Q ]) WITH IGNORE_DUP_KEY ON [ PRIMARY ]
None.gif GO
None.gif
None.gif

运行以下代码到查询分析器内:

None.gif -- select * from tbSrcData
None.gif

None.gif
None.gif -- 求单双
None.gif

None.gif Select ZZ. *, 6 -as [ ]
None.gif from(
None.gif select
None.gif *,
None.gif ( case when (F1 % 2) <> 0 then 1 else 0 end) +
None.gif ( case when (F2 % 2) <> 0 then 1 else 0 end) +
None.gif ( case when (F3 % 2) <> 0 then 1 else 0 end) +
None.gif ( case when (F4 % 2) <> 0 then 1 else 0 end) +
None.gif ( case when (F5 % 2) <> 0 then 1 else 0 end) +
None.gif ( case when (F6 % 2) <> 0 then 1 else 0 end) as
None.gif from tbSrcData A
None.gif) AS ZZ
None.gif
None.gif Select ZZ.单, 6 -as [ ]
None.gif into #TTT
None.gif from(
None.gif select
None.gif *,
None.gif ( case when (F1 % 2) <> 0 then 1 else 0 end) +
None.gif ( case when (F2 % 2) <> 0 then 1 else 0 end) +
None.gif ( case when (F3 % 2) <> 0 then 1 else 0 end) +
None.gif ( case when (F4 % 2) <> 0 then 1 else 0 end) +
None.gif ( case when (F5 % 2) <> 0 then 1 else 0 end) +
None.gif ( case when (F6 % 2) <> 0 then 1 else 0 end) as
None.gif from tbSrcData A
None.gif) AS ZZ
None.gif
None.gif select Sum(单) as a, Sum(双) as b FROM #TTT
None.gif drop table #TTT
None.gif
None.gif
None.gif set nocount on
None.gif -- 求出现率最高数
None.gif
declare @iCount int
None.gif declare @dnySql varchar( 1024)
None.gif declare @F1 int, @F2 int, @F3 int, @F4 int, @F5 int, @F6 int, @F7 int, @Q varchar( 10)
None.gif declare @WI int
None.gif declare @IsNext bit
None.gif declare @ILinkCount int
None.gif declare @blueNum int
None.gif
None.gif set @iCount = 1
None.gif Create Table #TmpTable(
None.gif Num Int null
None.gif)
None.gif while @iCount <= 7
None.gif begin
None.gif set @dnySql = ' Insert Into #TmpTable select F ' + Convert( Varchar, @iCount) + ' from tbSrcData '
None.gif Exec( @dnySql)
None.gif set @iCount = @iCount + 1
None.gif end
None.gif
None.gif Select Top 6 Num as 号码, Count( *) as 出现次数, ( select Count( *) from tbSrcData) / Count( *) AS 出现期数, ( case when(Num % 2 <> 0) then ' ' else ' ' end) as 类型
None.gif from #TmpTable
None.gif Group by Num
None.gif Order by Count( *) Desc
None.gif
None.gif Select Num as 号码, Count( *) as 出现次数, ( select Count( *) from tbSrcData) / Count( *) AS 出现期数, ( case when(Num % 2 <> 0) then ' ' else ' ' end) as 类型
None.gif from #TmpTable
None.gif Group by Num
None.gif Order by Count( *) asc
None.gif
None.gif
None.gif set @blueNum = 0
None.gif select @blueNum = BZ.F7 from(
None.gif select Top 1 F7 from tbSrcData group by F7 order by Count( *) desc
None.gif) AS BZ
None.gif select @blueNum as ' 兰色号码 '
None.gif
None.gif Select IDENTITY( int, 1, 1) as AutoID,AZ.号码
None.gif Into #TmpListTable
None.gif from (
None.gif Select Top 6 Num as 号码
None.gif from #TmpTable
None.gif Group by Num
None.gif Order by Count( *) Desc
None.gif) AS AZ
None.gif order by AZ.号码 asc
None.gif
None.gif Drop table #TmpTable
None.gif
None.gif create table # Table(
None.gif Q varchar( 10) null,f1 int null,f2 int null,f3 int null,f4 int null,f5 int null,f6 int null,f7 int null,fxqt int null
None.gif)
None.gif
None.gif Insert into # Table(Q,fxqt) values( ' 最高频率 ', 0)
None.gif
None.gif
None.gif
None.gif set @WI = 1
None.gif while @WI <=( Select Max(AutoID) from #TmpListTable)
None.gif begin
None.gif set @dnySql = ' Update #Table set f ' + Cast( @WI as Varchar) + ' =(select 号码 from #TmpListTable where AutoId = ' + Cast( @WI as varchar) + ' ) '
None.gif exec( @dnySql)
None.gif set @WI = @WI + 1
None.gif end
None.gif
None.gif update # Table set f7 = @blueNum
None.gif
None.gif drop table #TmpListTable
None.gif
None.gif select * from # Table
None.gif
None.gif Select IDENTITY( int, 1, 1) as AutoID, *
None.gif Into #TmpLinkTable
None.gif from
None.gif(
None.gif select Q,F1,F2,F3,F4,F5,F6,F7,FXQT, 0 as FLINK from tbSrcData
None.gif union all
None.gif select Q,F1,F2,F3,F4,F5,F6,F7,FXQT, 0 as FLink from # Table
None.gif) as BYZ
None.gif
None.gif drop table # Table
None.gif
None.gif set @WI = 1
None.gif while @WI <=( Select Max(AutoID) from #TmpLinkTable)
None.gif begin
None.gif select @Q =Q, @F1 =F1, @F2 =F2, @F3 =F3, @F4 =F4, @F5 =F5, @F6 =F6, @F7 =F7 from #TmpLinkTable where AutoID = @WI
None.gif set @IsNext = 0
None.gif set @ILinkCount = 0
None.gif set @IsNext = case when ABS( @F1 - @F2) = 1 then 1 else 0 end
None.gif if @IsNext = 1 set @ILinkCount = @ILinkCount + 1
None.gif set @IsNext = case when ABS( @F2 - @F3) = 1 then 1 else 0 end
None.gif if @IsNext = 1 set @ILinkCount = @ILinkCount + 1
None.gif set @IsNext = case when ABS( @F3 - @F4) = 1 then 1 else 0 end
None.gif if @IsNext = 1 set @ILinkCount = @ILinkCount + 1
None.gif set @IsNext = case when ABS( @F4 - @F5) = 1 then 1 else 0 end
None.gif if @IsNext = 1 set @ILinkCount = @ILinkCount + 1
None.gif set @IsNext = case when ABS( @F5 - @F6) = 1 then 1 else 0 end
None.gif if @IsNext = 1 set @ILinkCount = @ILinkCount + 1
None.gif set @IsNext = case when ABS( @F6 - @F7) = 1 then 1 else 0 end
None.gif if @IsNext = 1 set @ILinkCount = @ILinkCount + 1
None.gif
None.gif Update #TmpLinkTable set FLINK = @ILinkCount where AutoID = @WI
None.gif set @WI = @WI + 1
None.gif end
None.gif
None.gif select * from #TmpLinkTable
None.gif
None.gif -- Select (Select Count(*) from #TmpLinkTable ) / (select Sum(FLink) from #TmpLinkTable) as 连数出现频率
None.gif

None.gif select *,( Select Count( *) from #TmpLinkTable ) / ( select Sum(FLink) from #TmpLinkTable) as 平均多少期出现连号,
None.gif (f1 +f2 +f3 +F4 +F5 +f6 +f7) as
None.gif Into #TmpSumTable
None.gif from #TmpLinkTable
None.gif
None.gif drop table #TmpLinkTable
None.gif
None.gif select
None.gif 最高期 = ( select Top 1 Q from #TmpSumTable order bydesc),
None.gif 最高和 = ( select Top 1from #TmpSumTable order bydesc),
None.gif 最低期 = ( select Top 1 Q from #TmpSumTable order byasc),
None.gif 最低和 = ( select Top 1from #TmpSumTable order byasc)
None.gif
None.gif select ( 152 - 67) / 3
None.gif select 67
None.gif
None.gif select a. *,
None.gif [ ] = abs( a.和 - ( Selectfrom #TmpSumTable where AutoId =(a.AutoID + 1))),
None.gif [ 最大最小差百分比 ] =
None.gif (
None.gif cast( abs( a.和 - ( Selectfrom #TmpSumTable where AutoId =(a.AutoID + 1))) as float)
None.gif /
None.gif cast(
None.gif ( select Top 1from #TmpSumTable order bydesc) -
None.gif ( select Top 1from #TmpSumTable order byasc)
None.gif as float)
None.gif ) * 100
None.gif from #TmpSumTable a order by Q ASC
None.gif -- select
None.gif--
3 , 9 , 12 , 15 , 16 , 4 , 24,
None.gif--
3 + 9 + 12 + 15 + 16 + 4 + 24
None.gif

None.gif -- select 85 * 0.75
None.gif--
select 63.75 / 85
None.gif

None.gif Drop table #TmpSumTable



本文转自suifei博客园博客,原文链接http://www.cnblogs.com/Chinasf/archive/2005/10/23/260502.html,如需转载请自行联系原作者 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值