마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이드 내 저장한 디비에서 최대값 3 행만 가져오는 방법에 대해 질문합니다.

0 추천

D/Name:: Id: 1 ,Name: ㄱ ,Count: 15
D/Name:: Id: 2 ,Name: ㄴ ,Count: 0
D/Name:: Id: 3 ,Name: ㄷ ,Count: 0
D/Name:: Id: 4 ,Name: ㄹ ,Count: 0
D/Name:: Id: 5 ,Name: ㅁ ,Count: 10
D/Name:: Id: 6 ,Name: ㅂ ,Count: 0
D/Name:: Id: 7 ,Name: ㅅ ,Count: 0
D/Name:: Id: 8 ,Name: ㅇ ,Count: 0
D/Name:: Id: 9 ,Name: ㅈ ,Count: 0
D/Name:: Id: 10 ,Name: ㅊ ,Count: 5
D/Name:: Id: 11 ,Name: ㅋ ,Count: 0
D/Name:: Id: 12 ,Name: ㅌ ,Count: 0
D/Name:: Id: 13 ,Name: ㅍ ,Count: 0
D/Name:: Id: 14 ,Name: ㅎ ,Count: 0
D/Name:: Id: 15 ,Name: ㅏ ,Count: 0
D/Name:: Id: 16 ,Name: ㅑ ,Count: 0
D/Name:: Id: 17 ,Name: ㅓ ,Count: 0
D/Name:: Id: 18 ,Name: ㅕ ,Count: 0
D/Name:: Id: 19 ,Name: ㅜ ,Count: 0
D/Name:: Id: 20 ,Name: ㅠ ,Count: 0
D/Name:: Id: 21 ,Name: ㅡ ,Count: 0
D/Name:: Id: 22 ,Name: ㅣ ,Count: 0

이런식으로 디비에 count가 저장이 되어있으면,

이중에서 가장 큰 값 순서대로 

D/Name:: Id: 1 ,Name: ㄱ ,Count: 15

D/Name:: Id: 5 ,Name: ㅁ ,Count: 10

D/Name:: Id: 10 ,Name: ㅊ ,Count: 5

이렇게 가져오는 방법을 알고 싶습니다. ㅠㅠ 

public class DBContactHelper extends SQLiteOpenHelper {
    // All Static variables
    // Database Version
    private static final int DATABASE_VERSION = 1;

    // Database Name
    private static final String DATABASE_NAME = "char";

    // Contacts table name
    private static final String TABLE_CONTACTS = "contacts";

    // Contacts Table Columns names
    private static final String KEY_ID = "id";
    private static final String KEY_NAME = "name";
    private static final String KEY_COUNT = "count";
 
public long getMaxValue() {
    SQLiteDatabase db = this.getWritableDatabase();
    String sql = "SELECT max("+KEY_COUNT+") FROM "+ TABLE_CONTACTS;
    Cursor cursor = db.rawQuery(sql, null);
    if (cursor == null) {
        return -1;
    }

    if (!cursor.moveToFirst()) {
        cursor.close();
        return -1;
    }

    long max = 0;
    try {
        String strMax = cursor.getString(0);
        max = Long.parseLong(strMax);
    } catch (NumberFormatException e) {
        e.printStackTrace();
    }

    cursor.close();

    return max;
}
이런식으로 작성해보았습니다.. 일단 최대값만 구할 수 있게.. 저것 마저도
안되더라구요..ㅠ
익명사용자 님이 2016년 11월 17일 질문

1개의 답변

0 추천
SELECT * FROM 테이블명 ORDER BY Count desc limit 0,3
sadeva (21,550 포인트) 님이 2016년 11월 17일 답변
저함수에서 쿼리문만 이렇게 바꾸면 10 만 출력이 되요..
 limit 0,3은 index가 0부터 3까지를 선택하라라는 뜻 맞나요?
public int getMaxValue() {
        SQLiteDatabase db = this.getReadableDatabase();


        String sql = "SELECT * FROM "+ TABLE_CONTACTS+" ORDER BY "+KEY_COUNT+" desc limit 0,2";
        Cursor cursor = db.rawQuery(sql, null);
        if (cursor == null) {
            return -1;
        }

        if (!cursor.moveToFirst()) {
            cursor.close();
            return -1;
        }

        int max = 0;
        try {
            String strMax = cursor.getString(0);
            max = Integer.parseInt(strMax);
        } catch (NumberFormatException e) {
            e.printStackTrace();
        }

        cursor.close();

        return max;
    }
해당쿼리문이 해당 테이블의 Count  컬럼을 오름차순으로 정렬하고 오름차순으로 정렬된 상위3개 row 만 노출시킨다는 쿼리입니다
...