我有一张表民意调查:
id question votes
1 question1 3
2 question2 4
3 question3 3
我想独立计算投票行的百分比值。
这是我使用的代码:
SELECT *,(votes/sum(votes))*100 as perc from poll group by id;
当我这样做时,我得到的每个perc 100%
然后我尝试了这个:
SELECT *,(votes/sum(votes))*100 as perc from poll;
然后它只返回具有正确百分比值的第一行。
有人能告诉我我错过了什么吗?
答案 0 :(得分:2)
SELECT id,
sum(votes) * 100 / (select count(*) from poll) as perc
from poll
group by id
答案 1 :(得分:1)
我想你想要每个问题的每个投票的百分比。
您
SELECT *,(votes/sum(votes))*100 as perc from poll group by id;
没有工作,因为它通过ID获得总和。
因此,您首先必须在子查询中获得该总和然后除以它。问题是查询语法本身的操作顺序。
SELECT ID, Question, (votes/B.SV)*100 as perc
FROM POLL
CROSS JOIN (SELECT SUM(VOTES) SV FROM POLL) B
GROUP BY ID, Question
我更喜欢这种方法来选择select子句中的select,因为它只需要对每次select中的select进行一次数学运算。
答案 2 :(得分:0)
总票数(SUM()
)代表100%。因此,使用croos-multiplication,您需要此查询:
SELECT votes*100/SUM(votes) perc
FROM poll