首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > Informix >

求SQL分类统计sql语句,该怎么处理

2012-02-28 
求SQL分类统计sql语句,急表结构帐号|序号|成功与否|//1为成功2为失败a11a11a11a12a12a21a21a21a31b11b11b1

求SQL分类统计sql语句,急
表结构
帐号|     序号|       成功与否   |   //1为成功2为失败
a               1                     1
a               1                     1
a               1                     1
a               1                     2
a               1                     2      
a               2                     1
a               2                     1
a               2                     1
a               3                     1

b               1                     1
b               1                     1
b               1                     1
b               1                     2
b             1                     2      
b               2                     1
b               3                       1
请教如何得到不同帐号的相同序号的成功率



[解决办法]
给出结果数据?
[解决办法]
是要这样的结果吗?

---- ----------- ----------------------------------------
a 1 .600000
a 2 1.000000
a 3 1.000000
b 1 .600000
b 2 1.000000
b 3 1.000000

(所影响的行数为 6 行)
[解决办法]
create table sucess( zh char(1) ,xh int ,cg int)

insert sucess values( 'a ' , 1 , 1)
insert sucess values( 'a ' , 1 , 1)
insert sucess values( 'a ' , 1 , 1)
insert sucess values( 'a ' ,1 , 2)
insert sucess values( 'a ' ,1 , 2)
insert sucess values( 'a ' , 2 , 1)
insert sucess values( 'a ' , 2 , 1)
insert sucess values( 'a ' , 2 , 1)
insert sucess values( 'a ' , 3 , 1)
insert sucess values( 'b ', 1, 1)
insert sucess values( 'b ', 1, 1)
insert sucess values( 'b ', 1, 1)
insert sucess values( 'b ' , 1 , 2)
insert sucess values( 'b ' , 1 , 2)


insert sucess values( 'b ' , 2 , 1)
insert sucess values( 'b ' , 3 , 1)


select zh , xh,[rate] = sum(case cg when 1 then 1.0 when 2 then 0.0 end)/(sum(case cg when 1 then 0 when 2 then 1 end) +sum(case cg when 1 then 1.0 when 2 then 0.0 end))
from sucess group by zh,xh order by zh,xh
[解决办法]
MSSQL的语法拿到Informix里面去用当然不行....
[解决办法]
select 帐号, 序号, sum(case 成功与否 when 1 then 1.0 else 0.0 end)/count(成功与否)
from 表
group by 帐号, 序号
order by 帐号, 序号
[解决办法]

例如你给的数据 实际上账号已经没有用了,因为序号1,2,3,4都有不同账号存在,所以直接求序号的成功率就是你要的答案。
但是举个例子,例如当有序号1的账号只有a时 输出概率应该是0,
综上所述: 可以用嵌套的游标做此题

exec sql declare c1 cursor for select * from tb1 group by xu;
exec sql open;
do{ exec sql open c1 into :zh1,:xu,:cg;
if(sqlca.sqlcode==100) break;
exec sql declare c2 cursor for select * from tb1 where xu=:xu;
exec sql open;
do{ exec sql open c2 into :zh2,:xu,:cg;
if(sqlca.sqlcode==100) break;
if(strcmp(zh1,zh2)!=0){
exec sql declare c3 cursor for select * from tb1 where xu=:xu;
exec sql open;
int i=0,j=0;
do{ exec sql open c3 into :zh2,:xu,:cg;
if(sqlca.sqlcode==100) break;
if(cg==1) i++,j++;
if(cg==2) j++;
printf( "序号%d的成功率=%f\n ",xh,i/j);
}while(1);
exec sql close c3;
}
else {printf( "序号%d的概率=0\n ",xh);break;}
}while(1);
exec sql close c2;
}while(1)
exec sql close c1;

[解决办法]
哦 ,我是假设表已经建好了,就是按上边仁兄的字段作的
exec sql creat tb1 {
zh char(20);
xu int;
cg int
};
例外 字符串比较的时候可能还需要把取出的字符型数据做一下处理,
因为数据库里面的字符型存储是char[+1]。
[解决办法]
#include <stdio.h>
#include <string.h>
exec sql include sqlca.h;
exec sql include sqlda.h;
exec sql begin declare section;
int xu,zh,cg,zh1,zh2;
exec sql end declare section;
main()
{
exec sql connect to "tfmms ";


exec sql declare c1 cursor for select * from aa ;
if(sqlca.sqlcode!=0) printf( "erior=%d ",sqlca.sqlcode);
exec sql open c1;
if(sqlca.sqlcode!=0) printf( "err=%d ",sqlca.sqlcode);
do{ exec sql fetch c1 into :zh1,:xu,:cg;

if(sqlca.sqlcode!=0) printf( "err0=%d ",sqlca.sqlcode);
if(sqlca.sqlcode!=0) break;
zh=zh1;
int k=0;int i=0,j=0;
exec sql declare c3 cursor for select * from aa where xu=:xu ;
if(sqlca.sqlcode!=0) printf( "err04=%d ",sqlca.sqlcode);
exec sql open c3;
do{ exec sql fetch c3 into :zh2,:xu,:cg;
if(sqlca.sqlcode==100) break;
if(zh!=zh2) k++;
if(cg==1) i++,j++;
if(cg==2) j++;
}while(1);
if(k> 0)
printf( "账号%d序号%d的成功率=%f\n ",zh1,xu,(float)i/(float)j);


else printf( "账号%d序号%d的成功率=0 ",zh1,xu);
exec sql close c3;
}while(1);
exec sql close c1;
exec sql commit;
exec sql disconnect current;
exit(0);
已经编译成功!!!!!!!!!!!!!!!
[解决办法]
用游标可能会显得很繁琐。
楼主是用嵌入式开发?9楼的不错。
如果不是嵌入式的话,可以跟2楼kelph整一下SQL语句。


[解决办法]

探讨
用游标可能会显得很繁琐。
楼主是用嵌入式开发?9楼的不错。
如果不是嵌入式的话,可以跟2楼kelph整一下SQL语句。

热点排行