• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    mysql中count(), group by, order by使用详解

    最近做IM的时候遇到一个问题,同时用到了这三个关键字。就是查询一个人的离线消息详情,我们服务端返回给客户端显示的这个详情包括了三个内容,第一个要求列出离线这段时间哪些人或者群给你发了消息,第二个这其中的某个人或者群发了多少条离线消息,第三个拿出最新的一条显示出来。很明显,group by分组哪些人或者群给你发了离线消息,count()得到离线消息数量,order by时间来排序拿出最新的消息。

    select count(1) as cnt, msg_data from t_im_chat_offline_msg where to_company_id = ? and to_user_id = ? order by create_time desc group by from_company_id, from_user_id;

    然后果不其然group by和order by一起检索就报错了,我们可以用嵌套子查询。

    select count(1) as cnt, msg_data from (select * from t_im_chat_offline_msg where to_company_id = ? and to_user_id = ? order by create_time desc) as temp_table group by from_company_id, from_user_id;

    我们可以对已经排序的结果集,再来分组并计算数量。这里还有一个暗坑,我自己不小心给躲过去了,其实count()会造成order by排序无效,举个例子:

    select count(1) as cnt, msg_data from t_im_chat_offline_msg where to_company_id = ? and to_user_id = ? order by create_time desc;

    这个语句最后得到的一条记录,其中的msg_data其实是根本没有排序的结果,也就是数据库原顺序,应该是先插入的一条消息,就是说时间旧的消息。为了避免这个问题,所以嵌套子查询在这里先排序,再让它去count()就规避了。自己无意躲过去了,还好反复改语句测试了一番才发现。

    您可能感兴趣的文章:
    • MySQL中聚合函数count的使用和性能优化技巧
    • mysql count详解及函数实例代码
    • 详细解读MySQL中COUNT函数的用法
    • 浅谈MySQL 统计行数的 count
    • mysql count提高方法总结
    • MySQL中无过滤条件的count详解
    • MySQL中count(*)、count(1)和count(col)的区别汇总
    • MySQL中distinct和count(*)的使用方法比较
    • MYSQL中统计查询结果总行数的便捷方法省去count(*)
    • MySQL里的found_row()与row_count()的解释及用法
    • 详解 MySQL中count函数的正确使用方法
    上一篇:MySQL存储全角字符和半角字符的区别
    下一篇:Linux下安装配置MySQL
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    mysql中count(), group by, order by使用详解 mysql,中,count,group,order,使用,