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

sqlite 특정컬럼을 정렬하여 큰수 순서대로 TOP5 뽑는 방법 질문드립니다.

0 추천

안드로이드에 연동하여 하고 있는데요.

제가 id ; name ; count 이렇게 테이블을 생성했어요.

count 컬럼을 정렬하여 그중 큰수 5개를 뽑는 쿼리문을 작성하고있는데.. 

// 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";
String selectQuery = "SELECT * FROM "
                        + "(SELECT * FROM " + TABLE_CONTACTS +" ORDER BY " + KEY_COUNT + " DESC)"
                        + " LIMIT 5";
 
이렇게 하면
 D/Name:: Id: 1 ,Name: ㄱ ,Count: 48
D/Name:: Id: 2 ,Name: ㄴ ,Count: 0
D/Name:: Id: 3 ,Name: ㄷ ,Count: 0
D/Name:: Id: 4 ,Name: ㄹ ,Count: 2
D/Name:: Id: 5 ,Name: ㅁ ,Count: 12
D/Name:: Id: 6 ,Name: ㅂ ,Count: 0
D/Name:: Id: 7 ,Name: ㅅ ,Count: 5
D/Name:: Id: 8 ,Name: ㅇ ,Count: 0
D/Name:: Id: 9 ,Name: ㅈ ,Count: 0
D/Name:: Id: 10 ,Name: ㅊ ,Count: 0
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: 3
D/Name:: Id: 15 ,Name: ㅏ ,Count: 6
D/Name:: Id: 16 ,Name: ㅑ ,Count: 0
D/Name:: Id: 17 ,Name: ㅓ ,Count: 5
D/Name:: Id: 18 ,Name: ㅕ ,Count: 0
D/Name:: Id: 19 ,Name: ㅗ ,Count: 49
D/Name:: Id: 20 ,Name: ㅛ ,Count: 4
D/Name:: Id: 21 ,Name: ㅜ ,Count: 1
D/Name:: Id: 22 ,Name: ㅠ ,Count: 0
D/Name:: Id: 23 ,Name: ㅡ ,Count: 0
D/Name:: Id: 24 ,Name: ㅣ ,Count: 5
I/System.out: ///////////////////////////////////////////////////////////////////
탑5를 뽑으면
D/Name:: Id: 15 ,Name: ㅏ ,Count: 6
D/Name:: Id: 7 ,Name: ㅅ ,Count: 5
D/Name:: Id: 17 ,Name: ㅓ ,Count: 5
D/Name:: Id: 24 ,Name: ㅣ ,Count: 5
D/Name:: Id: 19 ,Name: ㅗ ,Count: 49
49 부터 출력되길 원하는데.. 6부터 나와요.. 이유를 잘 모르겠어요 ㅜ
왜 이렇게 출력되는걸까요?
String selectQuery = "SELECT * FROM "
        + TABLE_CONTACTS +" ORDER BY " + KEY_COUNT + " DESC limit 5";
이렇게도 해봤는데 출력값은 그대로더라구요..
익명사용자 님이 2016년 11월 22일 질문

1개의 답변

0 추천
질문에 올리신 CONTACT 테이블 create 문좀 볼수 있을까요?

혹시 KEY_COUNT 컬럼의 타입이 문자열 타입일때 나타나는 증상 같아요.

integer 타입으로 바꿔서 해보세용~
Development Guy (70,570 포인트) 님이 2016년 11월 22일 답변
public class Contact {
    int id;
    String name;
    int count;

    public Contact(){

    }
    public Contact(int id, String name, int count){
        this.id = id;
        this.name = name;
        this.count = count;
    }

    public Contact(String name, int count){
        this.name = name;
        this.count = count;
    }

    public int getID(){
        return this.id;
    }

    public void setID(int id){
        this.id = id;
    }

    public String getName(){
        return this.name;
    }

    public void setName(String name){
        this.name = name;
    }

    public int getCharCount(){
        return this.count;
    }

    public int setCharCount(int count){
        this.count = count;
        return count;
    }
}

key_count  = "count"를 표현했구요
어떤걸 integer로 바꿔야하나요?~
위 글 쿼리문이 짤려서요.
String selectQuery = "SELECT * FROM "
                                + "(SELECT * FROM " + TABLE_CONTACTS +" ORDER BY " + KEY_COUNT + " DESC)"
                                + " LIMIT 5";
이런식으로 짰습니다.
select가 아니라 테이블 생성하는 create 문을 말씀드린건뎅;;;
위에서 질문자님이 잘못된 결과로 올려준 순서 패턴이 DB상에서 'count' 타입이 문자일때 발생될수 있는 패턴이라 확인해보시라고 한거에요.
아~ 그렇군요.
보니까 TEXT 여서 INTEGER로 변경했는데.... 그런데도 정렬이 안되네요 ㅠㅠ
    @Override
    public void onCreate(SQLiteDatabase db) {
        String CREATE_CONTACTS_TABLE = "CREATE TABLE " + TABLE_CONTACTS + "("
                + KEY_ID + " INTEGER PRIMARY KEY," + KEY_NAME + " TEXT,"
                + KEY_COUNT + " INTEGER" + ")";
        db.execSQL(CREATE_CONTACTS_TABLE);
    }
OpenHelper의 onCreate문은 최초 데이터베이스 생성시 한번만 호출 됩니다.
앱을 덮어 씌우지 마시고 아예 앱 삭제 하신다음에 재설치 해보세요.
성공했어요^^ 감사합니다~
...