Получить процентный результат от вариантов опроса базы данных

Я сделал простой опрос для своего веб-сайта с вопросами, имеющими 3-5 или более вариантов (переключатели или флажки).

В php я получаю число выбравших определенный выбор через код:

  $query = "select count(distinct id) from survey_ans where question='q13' and answer='a3';";
  $res = mysql_query($query, $connection);
  $row = mysql_fetch_array($res);

это для вопроса 13 (q13) и третьего варианта ответа (a3).

Что мне нужно, так это знать, как я могу подсчитать количество любых заданных ответов на вопрос (например, q13: a1 + a2 + a3 + a4), это может быть как 1600, которые выбрали все ответы вместе, и вместо приведенного выше кода чтобы получить количество ответов для каждого варианта, я получаю процент от общего количества ответов на весь вопрос.

Итак, это показывает мне, что 15% людей, ответивших на вопрос 13, выбрали ответ 3, а ответ 4 — 55%.. и т. д.


person Mike    schedule 13.02.2014    source источник


Ответы (1)


Во-первых, вы можете получить количество с помощью агрегации:

select answer, count(id)
from survey_ans
where question = 'q13'
group by answer;

Я предполагаю, что count(distinct) действительно не нужен. count() лучше использовать, когда есть возможность.

Чтобы получить общее количество, присоедините это к:

select sa.answer, count(sa.id), tot.total
from survey_ans sa cross join
     (select count(*) as total from survey_ans where question = 'q13') as tot
where question = 'q13'
group by sa.answer;

Вы можете получить процент с чем-то вроде:

select sa.answer, 100.0*count(sa.id)/tot.total as percentage
from survey_ans sa cross join
     (select count(*) as total from survey_ans where question = 'q13') as tot
where question = 'q13'
group by sa.answer;
person Gordon Linoff    schedule 13.02.2014
comment
Спасибо, Гордон. Первые две агрегации работают нормально, однако последняя из процентов дает ошибку: ( # 1064 - у вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, для правильного синтаксиса для использования рядом с 'group от sa.answer' в строке 1) - person Mike; 13.02.2014
comment
@Майк. . . Вот что я получаю за то, что оставил лишнюю точку с запятой. Фиксированный. сейчас. - person Gordon Linoff; 13.02.2014