0

こんにちは、sqlite3 データベースにこのようなテーブルがあります。

db.execSQL(" CREATE TABLE IF NOT EXISTS "
        + DATABASE_TABLE + " ( " + KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"   + KEY_DATE + " TEXT, " + KEY_CATEGORY + " TEXT, "
        + KEY_SUB_CATEGORY + " TEXT, " + KEY_AMOUNT + " REAL, "
        + KEY_NOTE + " TEXT " + " );");

データベースにクエリを実行し、現在の年のすべての値を取得しKEY_SUB_CATEGORYましKEY_AMOUNTた。

Cursor c = db.query(DATABASE_TABLE,new String[] { KEY_SUB_CATEGORY, KEY_AMOUNT }, + KEY_YEAR + "=? ", new String[] { Integer.toString(currentYear) }, null, null, null, null);

さて、私の の値に基づいてさらにフィルタリングする方法はありますかKEY_SUB_CATEGORY

たとえば、myKEY_SUB_CATEGORYには Grocery の 3 つの値があります。

このカーソルから食料品の合計金額を取得する方法はありますか? KEY_SUB_CATEGORYまたは、毎回個別にクエリを実行する必要がありますか?

ここに画像の説明を入力

4

2 に答える 2

0
Cursor c = db.query(DATABASE_TABLE,
new String[] { KEY_SUB_CATEGORY, KEY_AMOUNT, "sum(" + KEY_AMOUNT + ") as catsum " }, 
+ KEY_YEAR + "=? ", new String[] { Integer.toString(currentYear) }, 
KEY_SUB_CATEGORY, null, null, null);  

c.getInteger(2) would be the sum
于 2013-03-27T19:11:17.430 に答える
0

このカーソルから食料品の合計金額を取得する方法はありますか? または、毎回 KEY_SUB_CATEGORY ごとに個別にクエリを実行する必要がありますか?

新しいクエリを作成し(コードが読みやすくなります)SUM()、トリックを作成する関数を使用することをお勧めします。

int sum = 0; 
String query = "select SUM(" + KEY_AMOUNT + ") from " + DATABASE_TABLE 
             + " where " + KEY_SUB_CATEGORY + " = ?";
Cursor c = db.rawQuery(query, new String[] {"Grocery"});
if (c.moveToFirst()) {
   sum = c.getInt(0);
}

出力は次のようになります。

select SUM(KEY_AMOUNT) from DATABASE_TABLE where KEY_SUB_CATEGORY = 'Grocery';
于 2013-03-27T19:06:52.500 に答える