2010-01-21 11 views
3

J'aimerais prendre des sondages (2 choix ou plus) et placer les résultats dans un tableau. Je veux juste savoir comment je pourrais comptabiliser les résultats dans une requête sql.Comment effectuer des calculs dans une requête SQL pour calculer la différence en pourcentage?

Encore plus, devrais-je faire le calcul dans la requête, ou simplement utiliser PHP pour faire le calcul?

Exemple

Questions Tableau

question_id (int) 
question (text) 
answer_1 (varchar) 
answer_2 (varchar) 
answer_3 (varchar) 
etc... 

Réponses Tableau

answer_id (int) 
question_id (int) 
answer (int) The answer they chose. (1, 2, 3, etc.) 

Comment qualifieriez/devrais-je additionnez les résultats?

Édition: en utilisant MySQL, PHP. La différence entre les réponses (45% dit bla, 50% dit bla bla, 5% dit bloch). Pas pour les devoirs, Im EE, pas CS

+2

différence entre quoi? – RedFilter

+1

Et pour quelle base de données? –

+0

semble impossible, relation entre Questions et réponses est manquant. Y a-t-il une colonne question_id dans le tableau Answers? – Constantin

Répondre

1

Si le nombre de réponses n'est pas connu auparavant, il serait plus simple de diviser le tableau des questions en 2 - un pour les questions (question_id, question_text) et un pour les choix (question_id, choice_id, choice_text). La table des réponses peut être transformée en (question_id, answer_id, choice_id). Ensuite, la sélection il utiliserait quelque chose comme ce qui suit (QID = l'ID de la question vous choisissez):

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; 

Tout cela ne fait compter le nombre total de réponses dans la requête interne, puis pour chaque choix , divisez le nombre de réponses par ce choix par le total.

0

Cela permet de sélectionner la popularité de chaque réponse dans la question:

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

Cela ne sélectionne les réponses si elles avaient jamais été donné.

0
select answer, count(*) from Answers where answer_id = 1 group by answer 

ou

select answer_id,answer, count(*) from Answers group by answer_id, answer 

Je vous donne une requête qui compte les réponses à chaque question, mais malheureusement vous n'avez pas un moyen de relier les réponses aux questions. Vous ne devriez pas non plus avoir answer_1, answer_2, etc. dans le tableau des questions. Vous devez normaliser la table. Si vous ne comprenez pas comment le faire, vous devez apprendre avant de concevoir une base de données.

Questions connexes