SQLite анализирует данные курсора - PullRequest
0 голосов
/ 22 апреля 2011

Я пишу тест и записываю отдельные ответы в базу данных SQLite. Моя таблица имеет следующий формат:

ID, сессия, RightWrong
1, 042102111244, 0
2, 042102111244, 1
3, 042102111244, 1
4, 042102111244, 1
5, 042102111244, 0
6, 042102111412, 0
7, 042102111412, 1
8, 042102111412, 0
9, 042102111412, 1

Где «сессия» относится ко времени, когда определенная викторина была начата , и каждая строка представляет один ответ (0 = неправильный ответ, 1 = правильный).

Меня интересует только «совокупность», т. Е. Сколько вопросов было дано правильного ответа (и сколько вопросов) за один тест.

Итак, мой курсор «мечты» будет:

Session, RightAnswers, TotalNoOfQuestions
042102111244, 3, 5
042102111412, 2, 4

Есть ли способ достичь этого? У меня проблемы с определением подходящего запроса (который, по общему признанию, является не столько проблемой программирования, сколько проблемой логики).

В данный момент я просто читаю все записи в курсоре
Cursor cursor = db.query(MyDataSQLHelper.TABLE, null, null, null, null, null, null); и подумал, что я предпочел бы сделать некоторую «постобработку», но не уверен, какой подход лучше.

Спасибо за вашу помощь,
Ник

Ответы [ 2 ]

2 голосов
/ 22 апреля 2011

Простой необработанный запрос будет выглядеть так:

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

Вы будете использовать Group By , чтобы объединить все строки в одном сеансе вместе, а затем использовать функции сумм и подсчета, чтобы выяснить разбивку внутри сеанса. Обратите внимание: «сумма» здесь работает только потому, что правильные ответы равны 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, чтобы немного его очистить, но я думаю, что он должен функционировать так же.

0 голосов
/ 22 апреля 2011

Вы используете предложение group by.

Вы используете запрос общего курсора (таблица строк, столбцы строки [], выбор строки, String [] selectionArgs, String groupBy, строка, имеющая, Строка orderBy)

ех. Курсор курсора = db.query (MyDataSQLHelper.TABLE, new String [] {"Session", "sum (RightWrong) RightAnswers", "count (Session) TotalNoOfQuestions"}, ноль, «Сессия», ноль, нуль);

Вы пытаетесь снова.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...