J'ai essayé différentes approches mais même si je pense que ma syntaxe est correcte, la requête ne fonctionne pas.Comptage du nombre total de réponses à partir des sondages dans MySQL
J'ai un système de sondage assez compliqué. En général chaque réponse au sondage est frappé légèrement dans une table
CREATE TABLE `polls` (
`poll_id` int(10) NOT NULL auto_increment,
`client_id` int(10) NOT NULL,
`key` varchar(20) NOT NULL,
`val` varchar(30) NOT NULL,
PRIMARY KEY (`poll_id`)
);
La colonne « clé » est comme ID de certaines questions (comme pour «À quelle fréquence vous buvez du café la clé serait « café »), le la valeur varie en fonction de la question - parfois 0 ou 1, parfois 0-6, parfois c'est une chaîne. À des fins statistiques, je veux afficher le pourcentage de chaque réponse pour chaque question. J'utilise cette requête pour que:
SELECT p.`key`, p.val, COUNT(p.poll_id) AS people,
(SELECT COUNT(client_id) FROM clients) AS total
FROM polls AS p GROUP BY p.`key`, p.val ORDER BY p.`key`, p.val
Le problème dans cette requête est que je dépends de table des clients pour obtenir le nombre total d'utilisateurs - qui ont travaillé lorsque chaque utilisateur a répondu à toutes les questions. Maintenant, nous avons ajouté une autre question au sondage et la requête ne fonctionne pas comme elle le devrait, car maintenant tous les utilisateurs ne répondent pas à cette question, mais le pourcentage est compté comme chaque utilisateur a répondu.
J'ai essayé de modifier la requête à quelque chose comme ça (j'ai essayé différentes façons, mais disons est venu à cela):
SELECT p.`key`, p.val, COUNT(p.poll_id) AS people,
(SELECT COUNT(p2.poll_id) FROM polls AS p2 WHERE p2.`key` = p.`key`) AS total
FROM polls AS p GROUP BY p.`key`, p.val ORDER BY p.`key`, p.val
La façon dont je le vois - il devrait obtenir toutes les valeurs de la requête principale , le groupe, puis exécuter la sous-requête - donc j'obtenir quelque chose comme:
coffee , 0 , 10 , 30
coffee , 1 , 15 , 30
coffee , 2 , 5 , 30
tea , 0 , 5 , 25
tea , 1 , 5 , 25
tea , 3 , 5 , 25
tea , 4 , 10 , 25
la dernière colonne compterait toutes les lignes qui ont la même clé et ignorer la colonne val (pour le café -> 10 + 15 + 5 = 30, pour le thé -> 5 + 5 + 5 + 10 = 25). La requête ne s'exécute pas. Il est en cours d'exécution et en cours d'exécution et finalement je dois l'annuler. Je sens que le problème est dans la partie "p2 key
= p key
" de la sous-requête, parce que si j'écris "p2. key
= 'café'" la requête fonctionne comme un charme.
Ce n'est pas ce que je veux - je veux obtenir le nombre de lignes avec la même valeur de clé - quelque chose comme ceci: 'SELECT COUNT (poll_id) des sondages GROUP BY key' L'astuce est que je veux l'obtenir dans une requête avec des données que je reçois déjà de la requête "originale". –