一份试卷,共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.   

    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
      

  2.   

    修改:
    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 
      

  3.   

    上面是同一试卷,下面是不同试卷
    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 
      

  4.   

    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
      

  5.   

    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_iddrop 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*/
      

  6.   

    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_iddrop 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          15 rows selected.
    */
      

  7.   

    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
      

  8.   


    一份试卷,共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.答案
      

  9.   

    用case when 就可以解决