Android:Sqlite查询添加每个选项的总投票数

时间:2013-11-20 10:14:18

标签: java android sql database sqlite

我有一个结果表,如下所示:

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%)

1 个答案:

答案 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