首页 > IT职业 > IT生活 > 求学生在某几道题上的答题正确率
已有试卷正确答案(如:abbaddccbaba……)和学生答案(如:abbabbaa……)以及某几道题号如(1,2,5,7,10……)的条件下求学生在这几道题上的正确率
参见:http://www.itpub.net/355415,2.html
[@more@]r为正确答案,s为学生答案,th为题号,需用逗号分开代码:
SQL> var r varchar2(10); SQL> exec :r :='abcdabcd';
PL/SQL 过程已成功完成。
已用时间: 00: 00: 00.30
SQL> var s varchar2(10); SQL> exec :s :='aabbccdd';
PL/SQL 过程已成功完成。
已用时间: 00: 00: 00.20
SQL> var th varchar2(10); SQL> exec :th :='1,4,6';
PL/SQL 过程已成功完成。
已用时间: 00: 00: 00.20
取得题号列表
SQL> select to_number(substr(:th,st+1,en-st-1)) th from (select decode(rn,1,0,in
str(:th,',',1,rn-1)) st ,decode(instr(:th,',',1,rn),0,length(:th)+1, instr(:th,'
,',1,rn)) en from (select rownum rn from dual connect by rownum<=length(:th)-len
gth(replace(:th,',',''))+1));
TH ----------
1
4
6
获得总题数和正确率
SQL> select count(*) zts, sum(case when substr(:r,th,1)=substr(:s,th,1) then 1 e
lse 0 end)/count(*) zql from (select to_number(substr(:th,st+1,en-st-1)) th from
(select decode(rn,1,0,instr(:th,',',1,rn-1)) st ,decode(instr(:th,',',1,rn),0,l
ength(:th)+1, instr(:th,',',1,rn)) en from (select rownum rn from dual connect b
y rownum<=length(:th)-length(replace(:th,',',''))+1)));
ZTS ZQL ---------- ----------
3 .333333333
SQL> exec :th :='1,2,7,4,6';
PL/SQL 过程已成功完成。
已用时间: 00: 00: 00.20
SQL> /
ZTS ZQL ---------- ----------
5 .2
SQL> exec :th :='1,2,7,5';
PL/SQL 过程已成功完成。
已用时间: 00: 00: 00.30
SQL> /
ZTS ZQL ---------- ----------
4 .25 .......................................................
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29867/viewspace-810748/ ,如需转载,请注明出处,否则将追究法律责任。