Se il numero di risposte non è noto in anticipo, sarebbe più semplice dividere la tabella delle domande in 2:una per le domande (question_id, question_text) e una per le scelte (question_id, choice_id, choice_text). La tabella delle risposte potrebbe essere inserita (question_id, answer_id, choice_id). Quindi selezionarlo utilizzerà qualcosa come il seguente (QID =l'ID della domanda che stai selezionando):
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;
Tutto ciò che fa è contare il numero totale di risposte nella query interna, quindi per ogni scelta, dividere il numero di risposte con quella scelta sul totale.