数据库教程:mysql中count(), group by, order by使用详解分享

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

selectcount(1)ascnt,msg_datafromt_im_chat_offline_msgwhereto_company_id=?andto_user_id=?orderbycreate_timedescgroupbyfrom_company_id,from_user_id;

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

selectcount(1)ascnt,msg_datafrom(select*fromt_im_chat_offline_msgwhereto_company_id=?andto_user_id=?orderbycreate_timedesc)astemp_tablegroupbyfrom_company_id,from_user_id;

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

selectcount(1)ascnt,msg_datafromt_im_chat_offline_msgwhereto_company_id=?andto_user_id=?orderbycreate_timedesc;

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

上述就是数据库技术:mysql中count(), group by, order by使用详解分享的全部内容,如果对大家有所用处且需要了解更多关于mysql数据库学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)! 您可能感兴趣的文章:MySQL中无过滤条件的count详解MySQL中聚合函数count的使用和性能优化技巧MySQL中count(*)、count(1)和count(col)的区别汇总mysqlcount详解及函数实例代码mySQLcount多个表的数据实例详解MySQL中distinct和count(*)的使用方法比较mysqlcount提高方法

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/dtteaching/914343.html

(0)
上一篇 2021年10月29日
下一篇 2021年10月29日

精彩推荐