使用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,等等,等等 等
如果有人有任何建议,请协助....
答案 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))