есть таблица, как этотМожет кто-нибудь помочь мне со сценарием для этого
empid questionid options 1 1 A 2 1 A 3 1 B 4 1 C
Теперь мне нужно привести, как это
questionid responseA responseB responseC 1 50% 25% 25%
есть таблица, как этотМожет кто-нибудь помочь мне со сценарием для этого
empid questionid options 1 1 A 2 1 A 3 1 B 4 1 C
Теперь мне нужно привести, как это
questionid responseA responseB responseC 1 50% 25% 25%
Вы можете 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;
Это один из возможных способов вы можете сделать это (работает на SQL-Server, но не уверен, что это происходит в 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
Примечание: Чтобы избежать литья и умножения 100, я использовал 100.0
и 0.0
значения в CASE ... END
выражений.
Конечно, это применимо, если параметры A, B или C. Чтобы добавить «%» в конец статистических значений, вы должны использовать инструкции для 'varchar':' CAST (SUM (...)/COUNT (. ..) AS VARCHAR (10)) + '%' '. –
Можете ли вы отформатировать его немного лучше? – extraneon
@vinoj - это домашнее задание? – Paolo
в соответствии с примером, вы должны хотеть, чтобы B и C имели 25% права? –