`
xmj101
  • 浏览: 8862 次
  • 性别: Icon_minigender_1
  • 来自: 福州
文章分类
社区版块
存档分类
最新评论
  • hbuzml:                                 ...
    Android短信数据字段
  • mklzdd: 呵呵 共勉!咱俩的经历差不多,在学校的时候又看这又学那的,不过 ...
    來時的路
  • xmj101: wiwiluo 写道升本是条好路另外LZ是啥学校,学的东西这么 ...
    來時的路
  • wiwiluo: 升本是条好路另外LZ是啥学校,学的东西这么NX
    來時的路
  • xmj101: 谢谢大家建议啊~不过要推荐出去很难的,小弟要资历没资历,要学历 ...
    來時的路

contentProvider实现groupby查询数据

 
阅读更多
比如要用实现这么一个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";

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

分享到:
评论

相关推荐

    Android ContentProvider实现手机联系人读取和插入

    - `query()`方法:使用ContentResolver的query方法进行数据查询,参数包括:要查询的URI、所需列、WHERE子句(筛选条件)、GROUP BY子句和ORDER BY子句。 - `Cursor`对象:查询结果会返回一个Cursor对象,可以通过...

    数据存储1

    开发者可以通过实现ContentProvider类并注册到Android系统,从而使得其他应用能够通过标准的URI来查询、插入、更新或删除数据。 综上所述,Android的数据存储体系提供了多样化的选择,开发者可以根据实际需求灵活...

    Android 查询工具源代码.rar

    源代码可能包含如何使用这些工具动态构造查询条件,进行多表联查,以及使用WHERE、GROUP BY、HAVING、ORDER BY和LIMIT子句的例子。 5. 异步查询与线程安全: 由于数据库操作可能涉及I/O,直接在主线程进行可能导致...

    Android 快捷查询源码.rar

    这可能包括WHERE子句来过滤结果,ORDER BY子句进行排序,以及GROUP BY和HAVING子句进行分组和条件过滤。 5. **SQLiteCursor**:执行查询后返回的结果集是SQLiteCursor对象,它提供遍历查询结果的方法,如`...

    Android通讯录联系人查询,自动提示,一个人多个号码

    在查询过程中,我们可以使用SQL的`GROUP BY`和`HAVING`语句来分组相同姓名的联系人,并通过`COUNT()`函数找出每个组中包含的电话号码数量。这样,我们可以确保即使有多个电话号码,每个联系人也会被正确地显示出来。...

    db.rar_android_android DB

    此外,还可以使用"WHERE"子句进行条件查询,"GROUP BY"和"HAVING"进行分组筛选,"ORDER BY"进行排序,以及"JOIN"实现表之间的连接操作。 4. Cursor对象:在Android中,查询结果通常返回一个Cursor对象,它是一个...

    MyDatabase

    对于复杂的查询,可以使用SQLite的JOIN、WHERE、GROUP BY、HAVING、ORDER BY和LIMIT子句来实现。例如,通过JOIN可以联接多个表,WHERE用于筛选数据,GROUP BY和HAVING用于分组统计,ORDER BY进行排序,LIMIT则用来...

    Android数据库技术[归纳].pdf

    3. `query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit)`:执行查询操作,返回一个`Cursor`对象,可以遍历查询结果...

    安卓SQLite

    - `SELECT`:从表中查询数据,可以通过`WHERE`子句指定条件,`JOIN`进行多表连接,`GROUP BY`和`HAVING`用于分组和过滤,`ORDER BY`进行排序,`LIMIT`和`OFFSET`用于分页。 - `INSERT INTO`:将数据插入到表中。 ...

    smalltools_android源码_

    `query()`方法接收多个参数,包括要查询的表名、要选择的列名、WHERE子句(这里根据_id匹配)、WHERE子句的参数、GROUP BY子句、HAVING子句和ORDER BY子句。在获取查询结果后,通过遍历Cursor对象来获取并封装数据。...

    sqlite学习资源,包括管理器,数据库文件,Android project

    - SELECT用于查询数据,可以结合WHERE、GROUP BY、HAVING和ORDER BY进行复杂查询。 - UPDATE用于更新现有数据。 - DELETE FROM用于删除数据。 - ALTER TABLE用于修改表结构,如添加或删除列。 - DROP TABLE用于删除...

    001AndroidSqlite

    可以使用`WHERE`子句指定查询条件,`ORDER BY`进行排序,`GROUP BY`进行分组,`LIMIT`限制返回结果的数量。 ```sql SELECT * FROM MyTable WHERE age > 18 ORDER BY age DESC LIMIT 10; ``` 3. 数据更新:使用`...

    android 数据库基础源码

    - `query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy)`:执行查询并返回`Cursor`对象。 3. `Model`类:通常代表数据库中的一个...

    android sqlite的应用

    - **查询数据**:使用`SELECT`语句,可以组合使用`WHERE`、`ORDER BY`、`GROUP BY`等子句进行条件查询、排序和分组。 - **更新数据**:使用`UPDATE`语句,如`UPDATE table_name SET column1 = value1 WHERE ...

    sqlite api

    3. **SELECT**:查询数据,可以使用`WHERE`子句过滤结果,`ORDER BY`进行排序,`GROUP BY`进行分组,以及`JOIN`进行表连接。 4. **UPDATE**:更新数据,例如:`UPDATE table_name SET column1 = new_value WHERE ...

    SQLiteTest

    此外,`WHERE`子句用于指定查询条件,`JOIN`用于合并多个表的数据,`GROUP BY`和`HAVING`用于数据分组,`ORDER BY`用于排序结果。 SQLiteTest可能还会涵盖`ContentProvider`的使用,这是Android系统中数据共享的一...

    安卓连数据库源码

    - `SELECT`用于查询数据,可以配合`WHERE`、`ORDER BY`和`GROUP BY`等子句进行条件筛选和排序。 - `UPDATE`更新已有数据。 - `DELETE FROM`删除数据。 4. **ContentProvider**:虽然可以直接使用SQL操作数据库,...

    Android数据库技术.pdf

    3. `query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit)`:执行查询操作,返回一个`Cursor`对象,包含查询结果。...

    Android开发之SQLIte数据库

    6. **查询数据**:使用`SELECT`语句获取数据,可以配合`WHERE`、`ORDER BY`、`GROUP BY`等子句进行筛选、排序和分组。 ```sql SELECT * FROM Users WHERE name = 'John Doe' ORDER BY email DESC; ``` 7. **更新...

    安卓数据库课程设计

    5. 查询数据:SQLite提供了SELECT语句来进行数据查询,可以使用WHERE子句指定条件,ORDER BY和GROUP BY子句进行排序和分组,以及JOIN操作连接多个表。在Android中,可使用SQLiteDatabase的query()方法进行查询操作。...

Global site tag (gtag.js) - Google Analytics