android group by

比如要用實現這麼一個sql語句:
SELECT _id, number, date, duration, type, name, numbertype,
numberlabel, COUNT(*) FROM calls  GROUP BY number,type,date/8640000
ORDER BY date DESC
這個在一般的SQL編譯工具裏都能正常運行,在ContentRosolver中有些不一樣。

用ContentRosolver中的query這麼寫:

private static String CALLS_COUNT = "calls_count";
static final String[] CALL_LOG_PROJECTION = new String[] {
           Calls._ID,
           Calls.NUMBER,
           Calls.DATE,
           Calls.DURATION,
           Calls.TYPE,
           Calls.CACHED_NAME,
           Calls.CACHED_NUMBER_TYPE,
           Calls.CACHED_NUMBER_LABEL,
           "COUNT(*) AS " + CALLS_COUNT
   };

String selection = "0==0) GROUP BY ("+
           Calls.NUMBER+"),("+
           Calls.TYPE+"),("+
           Calls.DATE+"/86400000
";  //這裏沒有左邊括號"("和右邊括號")"  程序會自己添加.

//0==0 一個=號和2個等於都可以.

rosolver.query(QUERY_TOKEN, null, Calls.CONTENT_URI,
               CALL_LOG_PROJECTION, selection, null, Calls.DEFAULT_SORT_ORDER);

注意事項:
1 關鍵字“COUNT, AS, GROUP BY”的大小寫
2 COUNT(*) 後需要跟AS ***
3 Android會將query中的參數整合成一條sql語句,其中會將selection的字符串自動加一個括號,形成 “WHERE
(*******)”的形式,所以要特別注意selection中有括號的情況
4 GROUP BY後面的字段應該加括號,用逗號隔開。

轉化爲sql語句正確的形式應該如下:
SELECT _id, number, date, duration, type, name, numbertype,
numberlabel, COUNT(*) FROM calls WHERE (0==0) GROUP BY
(number),(type),(date/8640000) ORDER BY date DESC

發佈了24 篇原創文章 · 獲贊 13 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章