Mysql 有人能帮我写剧本吗
有这样的桌子吗 empid questionid options 1 1 A 2 1 A 3 1 B 4 1 C questionid responseA responseB responseC 1 50% 25% 25% empid问题ID选项 11A 21 A 31B 4.1 C 现在我需要这样的结果 empid questionid options 1 1 A 2 1 A 3 1 B 4 1 C questionid responseA responseB responseC 1 50% 25% 25% 问题答案答案答案答案答案答案答案答案 1 50% 25% 25% 这是一种可能的方法 (在SQL Server上工作,但不确定它在MySql中是否工作)您可以使用PIVOTMysql 有人能帮我写剧本吗,mysql,sql-server,Mysql,Sql Server,有这样的桌子吗 empid questionid options 1 1 A 2 1 A 3 1 B 4 1 C questionid responseA responseB responseC 1 50% 25% 25% empid问题I
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
T-SQL:
注意:为了避免强制转换和乘以100,我在
案例中使用了100.0
和0.0
值。。。结束
表达式。您能把它的格式设置得更好一点吗?根据示例,您应该希望B和C的值为25%,对吗?是的,加布。你说得对。为什么这个服务器被标记为?如果是sqlserver
,那么为什么要使用mysql
标签呢?您是否有其他回复(除了A
、B
、C
)`?对不起,我是新用户。我在sql和server之间留了一个空格。它现在已编辑并保存。当然,如果选项是A、B或C,则它适用。要将“%”添加到统计值的末尾,您应该将语句强制转换为varchar
:cast(SUM(…)/COUNT(…)作为varchar(10))+“%”
。