2010-01-21 4 views
3

Я хотел бы провести опросы (2 или более вариантов) и поместить результаты в таблицу. Я просто хочу знать, как я мог бы подсчитать результаты в sql-запросе.Как выполнить математику в 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% сказали, что блоха). Не для домашней работы, Im EE, не CS

+2

разница между чем? – RedFilter

+1

А для какой базы данных? –

+0

Выглядит невозможно, отношения между Вопросами и ответами отсутствуют. Есть ли столбец question_id в таблице «Ответы»? – Constantin

ответ

1

Если количество ответов неизвестно заранее, было бы проще разбить таблицу вопросов на 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

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

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

Смежные вопросы