sql 写统计

zhuxianjun1 2008-12-11 09:27:07
一份试卷,共5道题(包含单选和多选)
存试卷答案表如下:
表:kst;
字段:student_id(学生ID) ,testpaper_id(试卷编号ID),title_id(题目编号ID),content(学生选的答案)
数据如下:
00001,60,1,A
00001,60,2,AB
00001,60,3,C
00001,60,4,ABD
00001,60,5,B
00002,60,1,C
00002,60,2,ABC
00002,60,3,D
00002,60,4,A
00002,60,5,BD
00003,60,1,D
00003,60,2,ABC
00003,60,3,AD
00003,60,4,A
00003,60,5,C

怎么写SQL 统计每道题,选A的有多少人,选B的有多少人,选C的有多少人,,选D的有多少人呢

...全文
91 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
顾问Peng 2009-02-09
  • 打赏
  • 举报
回复
用case when 就可以解决
dawugui 2008-12-12
  • 打赏
  • 举报
回复
create table tb(student_id varchar2(10),testpaper_id int,title_id int,content varchar2(10))
insert into tb values('00001',60,1,'A')
insert into tb values('00001',60,2,'AB')
insert into tb values('00001',60,3,'C')
insert into tb values('00001',60,4,'ABD')
insert into tb values('00001',60,5,'B')
insert into tb values('00002',60,1,'C')
insert into tb values('00002',60,2,'ABC')
insert into tb values('00002',60,3,'D')
insert into tb values('00002',60,4,'A')
insert into tb values('00002',60,5,'BD')
insert into tb values('00003',60,1,'D')
insert into tb values('00003',60,2,'ABC')
insert into tb values('00003',60,3,'AD')
insert into tb values('00003',60,4,'A')
insert into tb values('00003',60,5,'C')

select testpaper_id,title_id,
sum(case when instr(content,'A',1,1) > 0 then 1 else 0 end) A,
sum(case when instr(content,'B',1,1) > 0 then 1 else 0 end) B,
sum(case when instr(content,'C',1,1) > 0 then 1 else 0 end) C,
sum(case when instr(content,'D',1,1) > 0 then 1 else 0 end) D
from tb
group by testpaper_id,title_id

drop table tb

/*

TESTPAPER_ID TITLE_ID A B C D
------------ ---------- ---------- ---------- ---------- ----------
60 1 1 0 1 1
60 2 3 3 2 0
60 3 1 0 1 2
60 4 3 1 0 1
60 5 0 2 1 1

5 rows selected.
*/

dawugui 2008-12-12
  • 打赏
  • 举报
回复
create table tb(student_id varchar2(10),testpaper_id int,title_id int,content varchar2(10))
insert into tb values('00001',60,1,'A')
insert into tb values('00001',60,2,'AB')
insert into tb values('00001',60,3,'C')
insert into tb values('00001',60,4,'ABD')
insert into tb values('00001',60,5,'B')
insert into tb values('00002',60,1,'C')
insert into tb values('00002',60,2,'ABC')
insert into tb values('00002',60,3,'D')
insert into tb values('00002',60,4,'A')
insert into tb values('00002',60,5,'BD')
insert into tb values('00003',60,1,'D')
insert into tb values('00003',60,2,'ABC')
insert into tb values('00003',60,3,'AD')
insert into tb values('00003',60,4,'A')
insert into tb values('00003',60,5,'C')

select testpaper_id,title_id,
sum(case when instr(content,'A',1,1) > 0 then 1 else 0 end) A,
sum(case when instr(content,'B',1,1) > 0 then 1 else 0 end) B,
sum(case when instr(content,'C',1,1) > 0 then 1 else 0 end) C,
sum(case when instr(content,'D',1,1) > 0 then 1 else 0 end) D
from tb
group by testpaper_id,title_id

drop table tb

/*
select testpaper_id,title_id,
sum(case when instr(content,'A',1,1) > 0 then 1 else 0 end) A,
sum(case when instr(content,'B',1,1) > 0 then 1 else 0 end) B,
sum(case when instr(content,'C',1,1) > 0 then 1 else 0 end) C,
sum(case when instr(content,'D',1,1) > 0 then 1 else 0 end) D
from kst
group by testpaper_id,title_id

*/

dawugui 2008-12-12
  • 打赏
  • 举报
回复
select testpaper_id,title_id,
sum(case when instr(content,'A',1,1) > 0 then 1 else 0 end) A,
sum(case when instr(content,'B',1,1) > 0 then 1 else 0 end) B,
sum(case when instr(content,'C',1,1) > 0 then 1 else 0 end) C,
sum(case when instr(content,'D',1,1) > 0 then 1 else 0 end) D
from kst
group by testpaper_id,title_id
zhuxianjun1 2008-12-12
  • 打赏
  • 举报
回复
执行的时候报错啊
zhuxianjun1 2008-12-12
  • 打赏
  • 举报
回复

一份试卷,共5道题(包含单选和多选)
存试卷答案表如下:
表:kst;
字段:student_id(学生ID) ,testpaper_id(试卷编号ID),title_id(题目编号ID),content(学生选的答案)
数据如下:
00001,60,1,A
00001,60,2,AB
00001,60,3,C
00001,60,4,ABD
00001,60,5,B
00002,60,1,C
00002,60,2,ABC
00002,60,3,D
00002,60,4,A
00002,60,5,BD
00003,60,1,D
00003,60,2,ABC
00003,60,3,AD
00003,60,4,A
00003,60,5,C

怎么写SQL 统计每道题,选A的有多少人,选B的有多少人,选C的有多少人,,选D的有多少人呢


以上的查询结果怎么跟下面这个表关联并得出结果呢?比如选答案1有多少人 ?选答案2有多少人 ?选答案3有多少人 ?
表:ksnr
字段:testpaper_id(试卷编号ID) ,title_id(题目编号ID),result_id(供选择的答案ID),result_name(供选择的答案)
并且:kst.testpaper_id = ksnr.testpaper_id kst.title_id = ksnr.title_id

数据如下:
60,1,1,A.答案
60,1,2,B.答案
60,1,3,C.答案
60,1,4,D.答案
60,2,1,A.答案
60,2,2,B.答案
60,2,3,C.答案
60,2,4,D.答案
60,3,1,A.答案
60,3,2,B.答案
60,3,3,C.答案
60,3,4,D.答案


zhuxianjun1 2008-12-12
  • 打赏
  • 举报
回复
789 88 4 1 A.优秀 99 I
790 88 4 2 B.良好 99 I
791 88 4 3 C.及格 99 I
792 88 4 4 D.不及格 99


一份试卷,共5道题(包含单选和多选)
存试卷答案表如下:
表:kst;
字段:student_id(学生ID) ,testpaper_id(试卷编号ID),title_id(题目编号ID),content(学生选的答案)
数据如下:
00001,60,1,A
00001,60,2,AB
00001,60,3,C
00001,60,4,ABD
00001,60,5,B
00002,60,1,C
00002,60,2,ABC
00002,60,3,D
00002,60,4,A
00002,60,5,BD
00003,60,1,D
00003,60,2,ABC
00003,60,3,AD
00003,60,4,A
00003,60,5,C

怎么写SQL 统计每道题,选A的有多少人,选B的有多少人,选C的有多少人,,选D的有多少人呢


以上的查询结果怎么跟下面这个表关联并得出结果呢?比如选答案1有多少人 ?选答案2有多少人 ?选答案3有多少人 ?
表:ksnr
字段:testpaper_id(试卷编号ID) ,title_id(题目编号ID),result_id(供选择的答案ID),result_name(供选择的答案)
并且:kst.testpaper_id = ksnr.testpaper_id kst.title_id = ksnr.title_id

数据如下:
60,1,1,答案1
60,1,2,答案2
60,1,3,答案3
60,1,4,答案4
60,2,1,答案1
60,2,2,答案2
60,2,3,答案3
60,2,4,答案4
60,3,1,答案1
60,3,2,答案2
60,3,3,答案3
60,3,4,答案4


Andy__Huang 2008-12-11
  • 打赏
  • 举报
回复
上面是同一试卷,下面是不同试卷
SELECT testpaper_id,title_id,
sum(case when insert(content,'A',1,1)>0 then 1 else 0 end) A,
sum(case when insert(content,'B',1,1)>0 then 1 else 0 end) B,
sum(case when insert(content,'C',1,1)>0 then 1 else 0 end) C,
sum(case when insert(content,'D',1,1)>0 then 1 else 0 end) D
FROM KST
GROUP BY testpaper_id,title_id
Andy__Huang 2008-12-11
  • 打赏
  • 举报
回复
修改:
SELECT title_id,
sum(case when insert(content,'A',1,1)>0 then 1 else 0 end) A,
sum(case when insert(content,'B',1,1)>0 then 1 else 0 end) B,
sum(case when insert(content,'C',1,1)>0 then 1 else 0 end) C,
sum(case when insert(content,'D',1,1)>0 then 1 else 0 end) D
FROM KST
GROUP BY title_id
Andy__Huang 2008-12-11
  • 打赏
  • 举报
回复
SELECT student_id,testpaper_id,title_id,
sum(case when insert(content,'A',1,1)>0 then 1 else 0 end) A,
sum(case when insert(content,'B',1,1)>0 then 1 else 0 end) B,
sum(case when insert(content,'C',1,1)>0 then 1 else 0 end) C,
sum(case when insert(content,'D',1,1)>0 then 1 else 0 end) D
FROM KST
GROUP BY student_id,testpaper_id,title_id

zhuxianjun1 2008-12-11
  • 打赏
  • 举报
回复
有人回写??谢谢了

17,137

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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