2013-03-27 3 views
0

안녕하세요, 내 sqlite3 데이터베이스에서 이와 같은 테이블이 있습니다. android : 열 데이터 필터링

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_CATEGORYKEY_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의 값에 따라 필터를 촉진 할 수 있습니다.

예를 들어, 내 KEY_SUB_CATEGORY에는 식료품 점에 대해 3 개의 값이 있습니다.

이 커서에서 식료품 점의 총 금액을 구할 수있는 방법이 있습니까? 또는 매번 KEY_SUB_CATEGORY 각각에 대해 별도로 쿼리해야합니까?

enter image description here

답변

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'; 
+0

하지만 내가 한 번만 데이터베이스를 조회 할 수 있는지 알고 KEY_SUB_CATEGORY에 대한 모든 값을 가져온 다음 등 식료품, 연료에 대한 값을 필터링 할 및 커서에서 총 금액? – Sammys

+0

@kavya 나는 분리 된 쿼리를 선호합니다. 당신을 위해 더 읽기 쉽습니다. – Sajmon

+0

- 답변 해 주셔서 감사합니다. – Sammys

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