求SQL分类统计sql语句,急

cwj1983 2007-06-06 10:58:40
表结构
帐号| 序号| 成功与否 | //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
请教如何得到不同帐号的相同序号的成功率

...全文
786 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
无敌小奇 2008-05-21
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 jillnicky 的回复:]
用游标可能会显得很繁琐。
楼主是用嵌入式开发?9楼的不错。
如果不是嵌入式的话,可以跟2楼kelph整一下SQL语句。
[/Quote]
  • 打赏
  • 举报
回复
用游标可能会显得很繁琐。
楼主是用嵌入式开发?9楼的不错。
如果不是嵌入式的话,可以跟2楼kelph整一下SQL语句。

gyf2001 2007-08-03
  • 打赏
  • 举报
回复
#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);
已经编译成功!!!!!!!!!!!!!!!
gyf2001 2007-07-27
  • 打赏
  • 举报
回复
哦 ,我是假设表已经建好了,就是按上边仁兄的字段作的
exec sql creat tb1 {
zh char(20);
xu int;
cg int
};
例外 字符串比较的时候可能还需要把取出的字符型数据做一下处理,
因为数据库里面的字符型存储是char[+1]。
gyf2001 2007-07-27
  • 打赏
  • 举报
回复

例如你给的数据 实际上账号已经没有用了,因为序号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;
echiynn 2007-06-29
  • 打赏
  • 举报
回复
select 帐号, 序号, sum(case 成功与否 when 1 then 1.0 else 0.0 end)/count(成功与否)
from 表
group by 帐号, 序号
order by 帐号, 序号
echiynn 2007-06-29
  • 打赏
  • 举报
回复
MSSQL的语法拿到Informix里面去用当然不行....
cwj1983 2007-06-25
  • 打赏
  • 举报
回复
表结构
帐号| 序号| 成功与否 | //1为成功2,3,4为失败
a 1 1
a 1 1
a 1 3
a 1 2
a 1 2
a 2 1
a 2 4
a 2 1
a 3 1

b 1 1
b 1 3
b 1 1
b 1 2
b 1 2
b 2 3
b 3 3


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


楼上那位.我试了一下,好象不行
kelph 2007-06-07
  • 打赏
  • 举报
回复
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
kelph 2007-06-07
  • 打赏
  • 举报
回复
是要这样的结果吗?

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

(所影响的行数为 6 行)
OracleRoob 2007-06-06
  • 打赏
  • 举报
回复
给出结果数据?

1,194

社区成员

发帖
与我相关
我的任务
社区描述
其他数据库开发 Informix
社区管理员
  • Informix社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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