une table comme celui-ciQuelqu'un pourrait-il me aider avec le script de cette
empid questionid options 1 1 A 2 1 A 3 1 B 4 1 C
maintenant je dois le résultat comme celui-ci
questionid responseA responseB responseC 1 50% 25% 25%
une table comme celui-ciQuelqu'un pourrait-il me aider avec le script de cette
empid questionid options 1 1 A 2 1 A 3 1 B 4 1 C
maintenant je dois le résultat comme celui-ci
questionid responseA responseB responseC 1 50% 25% 25%
Vous pourriez PIVOT;
SELECT questionid, (A/total) * 100 responseA, (B/total) * 100 responseB, (C/total) * 100 responseC FROM (
SELECT T1.questionid, T1.options, T2.total
FROM the_tbl T1
INNER JOIN (SELECT questionid, CAST(COUNT(*) AS MONEY) AS total FROM the_tbl GROUP BY questionID) T2 ON T2.questionid = T1.questionid
) T
PIVOT (
COUNT(options) FOR options IN ([A], [B], [C])
) AS pvt
ORDER BY questionid
SELECT CAST(100/
(SELECT COUNT(*)
FROM your_Table as t2
WHERE t2.questionid = t1.questionid)
* COUNT(*) AS VARCHAR) + '%' AS 'Percent', OPTIONS, questionid
FROM your_Table as t1
--WHERE questionid = 2
GROUP BY OPTIONS, questionid
ORDER BY questionid;
C'est une façon possible, vous pouvez le faire (fonctionne sur SQL-Server mais ne sait pas si c'est le cas en MySql)
T-SQL:
SELECT
questionid,
SUM(CASE options WHEN 'A' THEN 100.0 ELSE 0.0 END)/COUNT(options) AS responseA,
SUM(CASE options WHEN 'B' THEN 100.0 ELSE 0.0 END)/COUNT(options) AS responseB,
SUM(CASE options WHEN 'C' THEN 100.0 ELSE 0.0 END)/COUNT(options) AS responseC
FROM
answers
GROUP BY
questionid
Note: Pour éviter la coulée et la multiplication 100, j'ai utilisé 100.0
et 0.0
valeurs dans CASE ... END
expressions.
Bien sûr, il est applicable si les options sont A, B ou C. Pour ajouter '%' à la fin des valeurs statistiques, vous devez convertir les instructions en 'varchar':' CAST (SUM (...)/COUNT (. ..) AS VARCHAR (10)) + '%' '. –
Pouvez-vous le formater un peu mieux? – extraneon
@vinoj - est ce devoir? – Paolo
Selon l'exemple, vous devriez vouloir que B et C aient 25%? –