#android #sqlite
#Android #sqlite
Вопрос:
Я кодирую тест и записываю отдельные ответы в базу данных SQLite. Моя таблица имеет следующий формат:
Идентификатор, сеанс, 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 = Правильный).
Меня волнует только «совокупность», то есть на сколько вопросов были даны правильные ответы (и из скольких вопросов) за тест.
Итак, курсор моей «мечты» был бы:
Сессия, правильные ответы, полное отсутствие вопросов
042102111244, 3, 5
042102111412, 2, 4
Есть ли способ добиться этого? У меня возникли проблемы с определением подходящего запроса (который, по общему признанию, является не столько проблемой программирования, сколько логической проблемой).
На данный момент я просто считываю все записи в курсор
Cursor cursor = db.query(MyDataSQLHelper.TABLE, null, null, null, null,
и подумал, что я предпочел бы выполнить некоторую «постобработку», но не уверен, какой подход лучше.
null, null);
Спасибо за вашу помощь,
Ник
Ответ №1:
Простой необработанный запрос был бы таким:
Cursor cursor = db.rawQuery("select session, sum(rightwrong) as RightAnswers, count(rightWrong) as TotalNoOfQuestions from tablename group by session");
Вы будете использовать Group By для объединения всех строк, относящихся к одному сеансу, вместе, затем используйте функции sum и count для определения разбивки внутри сеанса. Обратите внимание, что «сумма» здесь работает только потому, что правильные ответы равны 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);
Я разделил объявления массива строк, чтобы немного его почистить, но я думаю, что это должно функционировать так же.
Ответ №2:
Вы используете предложение group by.
Вы используете общедоступный запрос курсора (строка table, Строка[] columns, выбор строки, String[] selectionArgs, String groupBy, String having, String OrderBy)
например. Cursor курсор = db.query(MyDataSQLHelper.ТАБЛИЦА, новая строка[] {«Сессия», «сумма (RightWrong) правильных ответов», «количество (сеансовых) итоговых вопросов»}, null, «Сессия», null, null);
Вы пытаетесь снова.