0

少しトリッキーな問題があります。私のアプリはユーザー データを SQLite データベースに入力し、クエリを作成してデータを取り戻すことができました。

これには、個別の値のリストを取得するクエリが含まれます。例は次のとおりです。次のデータがあるとします。

Column a  |  Column b  | Column c
   a            a           a
   a            b           b
   a            b           b
   b            b           b

'group by' 関数を使用すると、クエリは次のリストを作成します。

aaa
abb
bbb

だから私がしようとしているのは、これを展開して、それぞれの個別のエントリが発生する回数のカウントを取得することです-したがって、上記の場合は次のようになります:

1 x aaa
2 x abb
1 x bbb

データベースにクエリを実行したら、カーソルから各エントリの出現回数を取得する方法はありますか?または、この情報を取得するために別のクエリを作成する必要がありますか..

現時点での私のクエリは次のとおりです。

public Cursor fetchDamagedComponentSpecForInspection(long inspectionId, String componentType) {
    Cursor mCursor = rmDb.query(true, DAMAGED_COMPONENTS_TABLE, new String[] {
            DAMAGED_COMPONENT_ID,
            LOCATION_LINK,
            RUN_LINK,
            AREA_LINK,
            INSPECTION_LINK,
            LOCATION_REF,
            RACKING_SYSTEM,
            COMPONENT,
            COMPONENT_TYPE,
            QUANTITY,
            POSITION,
            RISK,
            ACTION_REQUIRED,
            NOTES_GENERAL,
            MANUFACTURER,
            TEXT1,
            TEXT2,
            TEXT3,
            TEXT4,
            NOTES_SPEC,
            SPEC_SAVED}, 
            INSPECTION_LINK + " = " + inspectionId + " AND " + COMPONENT_TYPE + " = ? AND " + SPEC_SAVED + " = ? ", 
            new String[] {componentType, "Yes"},
            MANUFACTURER + ", " + TEXT1 + ", " + TEXT2 + ", " + TEXT3 + ", " + TEXT4 + ", " + NOTES_SPEC,
            null, null, null);
    if (mCursor != null) {
        mCursor.moveToFirst();
    }
    return mCursor;
}

詳細については、クエリを呼び出してデータを取得するメイン アクティビティのコードを次に示します。

final Cursor componentsAndSpecCursor = (Cursor) rmDbHelper.fetchComponentsAndSpecForManufacturer(inspectionId, rackingSystem, manufacturer);
                if(componentsAndSpecCursor.moveToFirst()){
                    do {
                        componentType = componentsAndSpecCursor.getString(componentsAndSpecCursor.getColumnIndex(RMDbAdapter.COMPONENT_TYPE));
                        specText1 = componentsAndSpecCursor.getString(componentsAndSpecCursor.getColumnIndex(RMDbAdapter.TEXT1));
                        specText2 = componentsAndSpecCursor.getString(componentsAndSpecCursor.getColumnIndex(RMDbAdapter.TEXT2));
                        specText3 = componentsAndSpecCursor.getString(componentsAndSpecCursor.getColumnIndex(RMDbAdapter.TEXT3));
                        specText4 = componentsAndSpecCursor.getString(componentsAndSpecCursor.getColumnIndex(RMDbAdapter.TEXT4));
                        specNotes = componentsAndSpecCursor.getString(componentsAndSpecCursor.getColumnIndex(RMDbAdapter.NOTES_SPEC));
                        message.append(componentType).append(" ").append(specText1).append(" ").append(specText2).append(" ").append(specText3).append(" ").append(specText4).append(" ").append(specNotes).append("\r\n");
                    }
                    while (componentsAndSpecCursor.moveToNext());
                }
                componentsAndSpecCursor.close();

そのため、このコードをクエリに含めた後、カウントを取得する方法もわかりません (これがどのように行われるかはまだわかりません!)。

4

3 に答える 3

1

必要なクエリは次のとおりです。

select count(*) as cnt, cola, colb, colc
from YourTable
group by cola, colb, colc

これをコードに組み込む方法がわかりません。指定したコード スニペットの組み合わせを返すクエリがないようです。

于 2013-01-05T16:35:36.343 に答える
1

COUNT(*)列リストに関数を追加しようとしましたか?

これを参照してください:カウント列グループ

于 2013-01-05T16:01:55.323 に答える
0

これを試して。

すべての一意の値を取得し、それらを一時的にどこかに保存し、ループして別のクエリを実行し、それらの値を再度見つけてみてください。値が見つかるたびに、カウンターを更新してください。

于 2013-01-05T15:52:31.023 に答える