mysql中如何使用count()、group by、order by

分类:编程技术 时间:2024-02-20 15:22 浏览:0 评论:0
0
本文将与大家分享如何在MySQL中使用count()、group by、order by。小编觉得还是比较实用的,所以分享给大家,作为参考。下面就跟随小编来看看吧。

如何使用count()、group by、mysql中的order by、order by排序查询、mysql中的asc升序、desc降序、group by分组查询、having只能在group中使用by 子句和函数 在组内,having 条件子句后面可以直接跟函数表达式。使用group by子句的查询语句需要使用聚合函数。

最近做IM的时候遇到一个问题,同时使用了这三个关键字。查询一个人的离线消息详情。我们的服务器返回给客户端的详细信息包括三个内容。第一个需要列出哪些人或群组在离线期间向您发送了消息。第二个是这个 有多少条离线消息已被设置不是某个人或某个团体的,第三个取出最新的并显示出来。显然,group by 是哪些人或者群组给你发了离线消息,count() 获取离线消息的条数,按时间 order 排序出最新的消息。

从 t_im_chat_offline_msg 中选择 count(1) 作为 cnt、msg_data,其中 to_company_id = ?和 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 s排序无效,例如:

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

这条语句得到的最后一条记录中的msg_data实际上是根本没有排序的结果,是数据库的原始顺序。应该是最先插入的消息,即旧消息。为了避免这个问题,这里先对嵌套子查询进行排序,然后用count()来避免。我无意中逃脱了,幸好经过反复改句测试才发现。

感谢您的阅读!这篇关于《mysql中如何使用count()、group by、order by》的文章就分享到这里。希望以上内容能够给大家带来一些帮助,让大家能够学到更多的知识。如果您觉得文章不错,可以分享出去,让更多人看到!

1. 本站所有资源来源于用户上传或网络,仅作为参考研究使用,如有侵权请邮件联系站长!
2. 本站积分货币获取途径以及用途的解读,想在本站混的好,请务必认真阅读!
3. 本站强烈打击盗版/破解等有损他人权益和违法作为,请各位会员支持正版!
4. 编程技术 > mysql中如何使用count()、group by、order by

用户评论