如何在SQL查询中执行数学计算以计算百分比差异?

3
我希望能够进行调查(包含2个或更多选项),并将结果放在表格中。我只是想知道如何在SQL查询中计算结果。
此外,我应该在查询中进行数学计算,还是使用PHP进行计算?
示例:
问题表格
question_id (int)
question (text)
answer_1 (varchar)
answer_2 (varchar)
answer_3 (varchar)
etc...

答案表

answer_id (int)
question_id (int)
answer (int) The answer they chose. (1, 2, 3, etc.)

我应该如何统计结果?

编辑:使用MySQL和PHP。答案之间的差异(45%的人说blah,50%的人说blah blah,5%的人说bloch)。这不是为了作业,我是EE专业的,不是CS专业的。


2
什么之间的区别? - D'Arcy Rittich
看起来不可能,问题和答案之间的关系丢失了。在答案表中有一个question_id列吗? - Constantin
有的,抱歉我忘了。 - BDuelz
3个回答

1
如果答案数量事先不知道,将问题表分成两个表会更简单 - 一个用于问题(question_id,question_text),另一个用于选项(question_id,choice_id,choice_text)。答案表可以制成(question_id,answer_id,choice_id)。然后选择它将使用类似以下内容的东西(QID =您要选择的问题的ID):
SELECT choice,
       (COUNT(*) / (SELECT COUNT(*)
                    FROM answers
                    WHERE answers.question_id = QID)) * 100 AS percentage
FROM choices
     INNER JOIN answers
       ON choices.choice_id = answers.choice_id
       AND choices.question_id AND choices.question_id
WHERE choices.question_id = QID
GROUP BY choice_id;

这只是计算内部查询中答案的总数,然后对于每个选项,将该选项的答案数除以总数。


0

这将选择问题中每个答案的受欢迎程度:

SELECT  question,
        COUNT(*) /
        (
        SELECT  COUNT(*)
        FROM    answers ai
        WHERE   ai.question = a.question
        )
FROM    answers a
GROUP BY
        question, answer

如果从未给出答案,则此操作不会选择答案。


0
select answer, count(*) from Answers where answer_id = 1 group by answer

或者

select answer_id,answer, count(*) from Answers  group by answer_id, answer

我可以给你一个查询来计算每个问题的答案数,但是很遗憾你没有将答案与问题相关联的方式。你也不应该在问题表中使用answer_1、answer_2等等。你需要对该表进行规范化。如果你不知道如何做到这一点,那么在设计数据库之前你需要学习它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接