Запрос SQLite в Android (суммирование значений столбцов)

#sql

#sql

Вопрос:

Привет, ребята, я хочу получить суммирование значений столбцов из моей базы данных sqlite в Android. и я пытаюсь использовать это, чтобы получить сумму значений KEY_COST столбца.

 public Cursor fetchAllCost() {
   return mDb.query(
                     DATABASE_TABLE, 
                     new String[] { "SUM(KEY_COST)"}, 
                     null, 
                     null, 
                     null, 
                     null, 
                     null);
}
  

но он выдает мне курсор, и я не знаю, как получить значение из объекта Cursor. Любая помощь!!!

Ответ №1:

Вы можете возвращать скалярные значения следующим образом:

 public int getColumnData() {

    mDb = mDbManager.getReadableDatabase();
    final SQLiteStatement stmt = mDb
            .compileStatement("SELECT SUM(KEY_COST) FROM...");

    // Cast as appropriate
    return (int) stmt.simpleQueryForLong();
}
  

Или альтернативно, в зависимости от используемого типа данных simpleQueryForString() .

Ответ №2:

Вы должны просто перейти к первому результату в курсоре с помощью cursor.moveFirst() , а затем вы можете сделать cursor.getInt(1) , чтобы получить скалярное значение.

Ответ №3:

rawQuery
Значение суммы находится в первом столбце — cursor.getInt(0);

 Cursor cursor = database.rawQuery(
    "SELECT SUM("   COL_NAME   ") FROM "   TABLE_NAME, null);
if(cursor.moveToFirst()) {
    return cursor.getInt(0);
}
  

запрос

 String[] columns = new String[] {                
                 "sum("   DbHelper.C_COUNT_OF_WORDS   ")"
                };

        String where = null;
        String whereArgs[] = null;
        String groupBy = null;
        String having = null;
        String order = null;
        String limit = null;

        database = dbHelper.getReadableDatabase();
        Cursor cursor = database.query(DbHelper.TABLE_STATISTICS, columns, where, whereArgs, groupBy, having, order, limit);

        if(cursor.moveToFirst()) {
            return cursor.getInt(0);            
        }