我有一个结果表,如下所示:
PollId UserId Option1 Option2 Option3 Option4 Option5
1 1 0 1 0 0 0
2 1 0 0 0 0 1
第一行,userid = 1投票选项2在pollId = 2中,userid = 1投票选项5在pollid = 2。
然后我有民意调查表:
PollId userId PollName OptionName1 OptionName 2 OptionName 3 OptionName 4
1 1 Yes/No Yes No null null
依此类推,直到optionname5。
我正在寻找的是,我想用特定的民意调查计算每个选项的百分比。我只是想知道如何继续这样做?我还处于学习阶段,所以请光临我。
在结果活动中,我想显示一个民意调查问题,其中有4个选项如下:
Option 1 (10%) Option 2 (20%) Option 3 (60%) Option 4 (10%)
答案 0 :(得分:0)
作为第一步,您应该重建数据库以对其进行规范化:
PollId UserId OptionNr
1 1 2
2 1 5
所以你的查询就是:
SELECT 'Option '||OptionNr, CAST(COUNT()*100/(SELECT COUNT() FROM Result WHERE PoolId=1) AS INT)||'%'
FROM Result
WHERE PoolId=1
GROUP BY OptionNr
ORDER BY OptionNr
如果您希望保留您的架构 - 迟早您会理解它是不够的 - 您可以执行以下查询:
SELECT 'Option 1', CAST(SUM(Option1)*100/COUNT() AS INT)||'%' FROM Results WHERE PoolId=1
UNION
SELECT 'Option 2', CAST(SUM(Option2)*100/COUNT() AS INT)||'%' FROM Results WHERE PoolId=1
UNION
SELECT 'Option 3', CAST(SUM(Option3)*100/COUNT() AS INT)||'%' FROM Results WHERE PoolId=1
UNION
SELECT 'Option 4', CAST(SUM(Option4)*100/COUNT() AS INT)||'%' FROM Results WHERE PoolId=1
UNION
SELECT 'Option 5', CAST(SUM(Option5)*100/COUNT() AS INT)||'%' FROM Results WHERE PoolId=1