Si el número de respuestas no se conoce de antemano, sería más sencillo dividir la tabla de preguntas en 2:una para las preguntas (question_id, question_text) y otra para las opciones (question_id, choice_id, choice_text). La tabla de respuestas podría convertirse en (question_id, answer_id, choice_id). Luego, seleccionarlo sería usar algo como lo siguiente (QID =el ID de la pregunta que está seleccionando):
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;
Todo lo que hace es contar el número total de respuestas en la consulta interna, luego, para cada opción, dividir el número de respuestas con esa opción entre el total.