SQLite分析游标数据

时间:2011-04-22 01:12:05

标签: android sqlite

我正在编写测验并在SQLite-Database中记录个别答案。我的表格格式如下:

ID,会话,RightWrong
1,042102111244,0 2,042102111244,1 3,042102111244,1 1 4,042102111244,1 5,042102111244,0 6,042102111412,0 7,042102111412,1 8,042102111412,0 9,042102111412,1

其中“会话”是指某个测验启动的时间,每行代表一个答案(0 =错误答案,1 =正确)。

我只关心“聚合”,即每个测验正确回答了多少问题(以及多少问题)。

所以我的“梦想”光标将是:

会话,RightAnswers,TotalNoOfQuestions
042102111244,3,5 042102111412,2,4

有没有办法实现这个目标?我无法找出一个合适的查询(这无疑是一个编程问题而不是逻辑问题)。

此刻,我只是将所有条目都读入光标中 Cursor cursor = db.query(MyDataSQLHelper.TABLE, null, null, null, null, null, null); 并且我认为我宁愿做一些“后处理”,但我不确定什么是最好的方法。

感谢您的帮助,
尼克

2 个答案:

答案 0 :(得分:2)

一个简单的原始查询将是这样的:

Cursor cursor = db.rawQuery("select session, sum(rightwrong) as RightAnswers, count(rightWrong) as TotalNoOfQuestions from tablename group by session");

您将使用Group By将所有行与同一会话组合在一起,然后使用sum和count函数来计算会话中的细分。注意“sum”只能起作用,因为正确的答案是1而错误的答案是0,如果你改变记录答案的方式,你将不得不稍微改变一下。

我将尝试猜测db.query调用的外观:

String[] columns = {"Session", "sum(RightWrong) as RightAnswers", "count(RightWrong) as TotalNoOfQuestions";
String[] groupBy = {"Session"};


Cursor cursor = db.query("tablename", columns, null, null, groupBy, null, null);

我将String数组声明分开以稍微清理它,但我认为它的功能应该相同。

答案 1 :(得分:0)

您正在使用group by子句。

您正在使用 public Cursor query(String table,String [] columns,String selection,             String [] selectionArgs,String groupBy,String having,             字符串顺序())

离。 游标光标= db.query(MyDataSQLHelper.TABLE,  new String [] {“Session”,“sum(RightWrong)RightAnswers”,“count(Session)TotalNoOfQuestions”}, 空值, “会话”, 空值, 空);

你再试一次。