Java 用于添加每个选项的投票总数的Sqlite查询

Java 用于添加每个选项的投票总数的Sqlite查询,java,android,sql,database,sqlite,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在pollId=2中投票选择2,userid=1在pollId=2

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

PollId   UserId   Option1   Option2   Option3   Option4   Option5
1          1        0         1        0            0       0
2          1        0         0        0            0       1
第一行,userid=1在pollId=2中投票选择2,userid=1在pollId=2中投票选择5

然后是民意调查表:

PollId   userId   PollName       OptionName1  OptionName 2   OptionName 3   OptionName 4   
 1         1       Yes/No        Yes              No            null           null
依此类推,直到选项名称5

我想用一个特定的投票来计算每个选项的百分比。我只是想要一个起点,告诉你我该怎么做

在“结果”活动中,我想展示一个投票问题,该问题有4个选项,如下所示:


作为第一步,您应该重建数据库以使其正常化:

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

民意测验表的目的是什么?用于存储民意测验问题及其选项。结果表存储用户为特定民意测验选择的选项什么是
poll.userId
for?在民意测验表中,userId对应于投票人,在结果表中,userId对应于投票人。谢谢。我想获得特定pollId的结果。那么在这种情况下,我是否应该添加WHERE子句?例如:PollId='1'在哪里等?此外,一些民意测验有两种选择来回答“是”或“否”问题。而有些则超过了2。如何解决这个问题?这是一个不同的问题,因为
选项1(10%)
不适合显示结果。想想假装的结果,问一个新的问题,如果它和这个太不一样。好吧,酷。我使用的是SQLite数据库FTR,我以前在查询中从未见过UNION符号。这是因为您的数据库没有规范化。每个选项都是一列而不是一行,因此必须使用
UNION
来重新排列列。哼。。。我不明白为什么。可能是FTR API的限制?
 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