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