计算多项选择结果

时间:2014-03-18 00:55:34

标签: mysql

使用MYSQL,我创建了一个调查,用户可以回答一系列关于他们所学课程的问题(6个问题)。我有一个COURSE表和SURVEY_ANSWERS表(其中包括现在无关紧要的表)。每个问题的答案范围为0-5,只有整数,没有小数。

我正试图找到一种方法,按课程编号总计每个问题的所有答案。

到目前为止,我能够使用以下方式查看问题1(q1)的总数:

select a.fk_courseID, 
(select 
        count(a.q1)
    from
        survey_answers a
    where
        q1 = 0) as Q1_NR,
(select 
        count(a.q1)
    from
        survey_answers a
    where
        q1 = 1) as Q1_SD,
(select 
        count(a.q1)
    from
        survey_answers a
    where
        q1 = 2) as Q1_D,
(select 
        count(a.q1)
    from
        survey_answers a
    where
        q1 = 3) as Q1_NAD,
(select 
        count(a.q1)
    from
        survey_answers a
    where
        q1 = 4) as Q1_A,
(select 
        count(a.q1)
    from
        survey_answers a
    where
        q1 = 5) as Q1_SA from survey_answers a
   group by a.fk_courseID

对我来说似乎很混乱,就像我确定有更有效的方法这样做这会输出每个不同的courseID(我想要的),但它不是按课程编号分隔结果,它显示相同的数字每门课程都有0s,1s,2s等。

有人能指出我正确的方向吗?一旦我弄清楚如何为一个问题做这个,我相信我可以自己找出接下来的5个问题。我尝试过使用不同的SELF JOINS和OUTER LEFT JOINS,但无济于事,我确信我错过了一些小事。 我也试过这个:

select a.fk_courseID, a.q1, a.count1, b.count2 from
(select fk_courseID, q1, count(*) as count1 from survey_answers group by   fk_courseID)     as a
left outer join (select fk_courseID, q1, count(*) as count2 from survey_answers where     q1=1) as b on b.fk_courseID=a.fk_courseID

以上输出'1'到Q1的答案数,但这次它列出了每个courseID,但是q1的总数为1,而其余为NULLS,我正在寻找类似的东西:

CourseID Q1_1 Q1_2 67 3 4 1 2 3 3 5 2

课程67的含义Q1的答案为1,Q1的答案为4,等等。课程1有1个答案,3答案为2,等等,等等 等

如果有人有任何建议,请协助....

1 个答案:

答案 0 :(得分:1)

您想要条件聚合!

select a.fk_courseID, 
       sum(q1 = 0) as Q1_NR,
       sum(q1 = 1) as Q1_SD,
       sum(q1 = 2) as Q1_D,
       sum(q1 = 3) as Q1_NAD,
       sum(q1 = 4) as Q1_A,
       sum(q1 = 5) as Q1_SA
from survey_answers a
group by a.fk_courseID;

在MySQL中,布尔值的结果是1用于" true"和0 for" false"。这很方便。您可以通过仅对结果求和来轻松计算匹配数。

编辑:

您可以通过以下方式检查您的需求:

sum(0 in (q1, q2, q3, q4, q5, q6))