2012-12-20 61 views
2

我知道如何创建一个查询来查找唯一的值,但我想要统计每个不同值的数量。如何获得每个不同值的计数(SQLite查询-Android)

所以我的代码的例子,在我的数据库帮手,它只是给了我不同的值的列表:

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; 
} 

因此,这将返回一个列表是这样的:

Dexion, M Duty, 3000mm, Blue 
Hi-lo, Rackplan, 4000mm, Blue 
PSS, P85 1.6, 4500mm, Blue 

但我想知道每个值有多少(即有多少'Dexion,M Duty,3000mm,Blue'条目,因此输出看起来有点像这样:

2 x Dexion, M Duty, 3000mm, Blue 
5 x Hi-lo, Rackplan, 4000mm, Blue 
1 x PSS, P85 1.6, 4500mm, Blue 

CommonsWare已经提出了一个帖子里面提供了以下解决方案:

select type, count(type) from table group by type; 

不过,我不能确定如何将这种融入我现有的与我使用的查询类型代码。

编辑 - 下面是我尝试这个计数功能没有成功整合:

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 + 
        ", Count (*) AS count", 
        null, null, null); 
     if (mCursor != null) { 
      mCursor.moveToFirst(); 
     } 
     return mCursor; 
} 

也不能明白,我怎么居然在我的主要代码检索此(下面是我如何才能走出位在瞬间):

 manufacturer = RMUtilities.notEmpty(cursor.getString(cursor.getColumnIndex(RMDbAdapter.MANUFACTURER)),""); 
     text_1 = RMUtilities.notEmpty(cursor.getString(cursor.getColumnIndex(RMDbAdapter.TEXT1)),""); 
     text_2 = RMUtilities.notEmpty(cursor.getString(cursor.getColumnIndex(RMDbAdapter.TEXT2)),""); 
     text_3 = RMUtilities.notEmpty(cursor.getString(cursor.getColumnIndex(RMDbAdapter.TEXT3)),""); 
     text_4 = RMUtilities.notEmpty(cursor.getString(cursor.getColumnIndex(RMDbAdapter.TEXT4)),""); 
     spec_notes = RMUtilities.notEmpty(cursor.getString(cursor.getColumnIndex(RMDbAdapter.NOTES_SPEC)),""); 

但是如何获取计数值呢?

在此先感谢。

+2

http://stackoverflow.com/questions/5522607/how-can-i-do-a-count-distinct-in-sqlite – CommonsWare

+0

感谢CommonsWare,我看过该帖子。我只是有点困惑,我怎么跟我写的查询方式(即它是一个很大的查询,我在哪里放置数(独特),我如何获取这些信息?) – Scamparelli

回答

0

从我的代码:

String w = myColumn + "like ?" 
String [] args = { myData } 
c = ourDatabase.query(DATABASE_TABLE, columns, w, args, null, null, null); 
int count = c.getCount(c.getColumnIndex(myColumn)); 
+0

嗨AndroidPenguin,我恐怕我不明白这将如何与我的类型的查询。如果我错过了一些非常明显的事情,那么适当的新手在这里很抱歉。 – Scamparelli