【问题标题】:How would I perform math within a sql query to calculate percent difference?我将如何在 sql 查询中执行数学以计算百分比差异?
【发布时间】:2010-01-21 17:48:44
【问题描述】:

我想进行调查(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% 说废话,50% 说废话,5% 说废话)。不是作业,我是EE,不是CS

【问题讨论】:

  • 有什么区别?
  • 看起来不可能,问题和答案之间的关系缺失。 Answers 表中是否有 question_id 列?
  • 是的,抱歉我忘记了

标签: php sql mysql math


【解决方案1】:

如果事先不知道答案的数量,将问题表分成 2 个会更简单 - 一个用于问题(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;

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

【讨论】:

    【解决方案2】:

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

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

    如果从未给出答案,这将不会选择答案。

    【讨论】:

      【解决方案3】:
      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 等。您需要规范化该表。如果你不明白怎么做,你需要在设计数据库之前学习。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-11-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多