gpt4 book ai didi

mysql - 计算多项选择结果

转载 作者:行者123 更新时间:2023-11-29 03:01:47 25 4
gpt4 key购买 nike

我使用 MYSQL 创建了一项调查,用户可以在其中回答有关他们参加的类(class)的一系列问题(6 个问题)。我有一个 COURSE 表和 SURVEY_ANSWERS 表(现在不重要)。每个问题都按照 0-5 的等级回答,只有整数,没有小数。

我正在尝试找到一种方法来按类(class)编号汇总每个问题的所有答案。

到目前为止,我可以使用以下方法查看问题 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(我想要的),但是它没有按类(class)编号分隔结果,它显示相同数量的每门类(class)的 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,我正在寻找类似于:

类(class)编号 Q1_1 Q1_267 3 41 2 33 5 2

对于类(class) 67 的含义,Q1 有 3 个答案为 1,Q1 有 4 个答案为 2,等等。类(class) 1 有 2 个答案为 1,有 3 个答案为 2,等等等等

如果有人有建议请协助....

最佳答案

你想要条件聚合!

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 中, bool 值的结果是 1 表示“true”,0 表示“false”。这很方便。您只需对结果求和即可轻松计算出匹配项的数量。

编辑:

您可以通过以下方式检查您想要的内容:

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

关于mysql - 计算多项选择结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22468416/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com