Как мне выполнить математику в запросе SQL для расчета разницы в процентах? - PullRequest
3 голосов
/ 21 января 2010

Я бы хотел принять участие в опросах (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

Ответы [ 3 ]

1 голос
/ 21 января 2010

Если количество ответов не известно заранее, было бы проще разделить таблицу вопросов на 2 - одну для вопросов (question_id, question_text) и одну для вариантов выбора (question_id, choice_id, choice_text). Таблица ответов может быть преобразована в (question_id, answer_id, choice_id). Тогда для его выбора будет использоваться что-то вроде следующего (QID = идентификатор выбранного вами вопроса):

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 голосов
/ 21 января 2010
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 и т. Д. В таблице вопросов. Вам нужно нормализовать таблицу. Если вы не понимаете, как это сделать, вам нужно узнать, прежде чем создавать базу данных.

0 голосов
/ 21 января 2010

Это выберет популярность каждого ответа на вопрос:

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

Это не будет выбирать ответы, если они никогда не были даны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...