mysql中count(), group by, order by怎么用

59次阅读
没有评论

共计 1249 个字符,预计需要花费 4 分钟才能阅读完成。

自动写代码机器人,免费开通

这篇文章给大家分享的是有关 mysql 中 count(), group by, order by 怎么用的内容。丸趣 TV 小编觉得挺实用的,因此分享给大家做个参考,一起跟随丸趣 TV 小编过来看看吧。

mysql 中 count(), group by, order by 使用方法,mysql 中 order by 排序查询、asc 升序、desc 降序,group by   分组查询、having 只能用于 group by 子句、作用于组内,having 条件子句可以直接跟函数表达式。使用 group 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(), group by, order by 怎么用”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

向 AI 问一下细节

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-12-16发表,共计1249字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)