我正在编写测验并在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);
并且我认为我宁愿做一些“后处理”,但我不确定什么是最好的方法。
感谢您的帮助,
尼克
答案 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”}, 空值, “会话”, 空值, 空);
你再试一次。