mysql中count(), group by, order by使用詳解
最近做IM的時(shí)候遇到一個(gè)問(wèn)題,同時(shí)用到了這三個(gè)關(guān)鍵字。就是查詢一個(gè)人的離線消息詳情,我們服務(wù)端返回給客戶端顯示的這個(gè)詳情包括了三個(gè)內(nèi)容,第一個(gè)要求列出離線這段時(shí)間哪些人或者群給你發(fā)了消息,第二個(gè)這其中的某個(gè)人或者群發(fā)了多少條離線消息,第三個(gè)拿出最新的一條顯示出來(lái)。很明顯,group by分組哪些人或者群給你發(fā)了離線消息,count()得到離線消息數(shù)量,order by時(shí)間來(lái)排序拿出最新的消息。
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一起檢索就報(bào)錯(cuò)了,我們可以用嵌套子查詢。
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;
我們可以對(duì)已經(jīng)排序的結(jié)果集,再來(lái)分組并計(jì)算數(shù)量。這里還有一個(gè)暗坑,我自己不小心給躲過(guò)去了,其實(shí)count()會(huì)造成order by排序無(wú)效,舉個(gè)例子:
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;
這個(gè)語(yǔ)句最后得到的一條記錄,其中的msg_data其實(shí)是根本沒(méi)有排序的結(jié)果,也就是數(shù)據(jù)庫(kù)原順序,應(yīng)該是先插入的一條消息,就是說(shuō)時(shí)間舊的消息。為了避免這個(gè)問(wèn)題,所以嵌套子查詢?cè)谶@里先排序,再讓它去count()就規(guī)避了。自己無(wú)意躲過(guò)去了,還好反復(fù)改語(yǔ)句測(cè)試了一番才發(fā)現(xiàn)。
- MySQL GROUP BY多個(gè)字段的具體使用
- mysql的group?by使用及多字段分組
- mysql5.7同時(shí)使用group by和order by報(bào)錯(cuò)問(wèn)題
- MySQL中g(shù)roup by與max()一起使用的坑
- MySQL group by和order by如何一起使用
- MySQL去重該使用distinct還是group by?
- MySQL中使用group by 是總是出現(xiàn)1055的錯(cuò)誤(推薦)
- Mysql中錯(cuò)誤使用SQL語(yǔ)句Groupby被兼容的情況
- mysql使用GROUP BY分組實(shí)現(xiàn)取前N條記錄的方法
- Mysql中g(shù)roup by 使用中發(fā)現(xiàn)的問(wèn)題
相關(guān)文章
MySQL查詢語(yǔ)句過(guò)程和EXPLAIN語(yǔ)句基本概念及其優(yōu)化
在MySQL中我們經(jīng)常會(huì)使用到一些查詢語(yǔ)句,如果使用合適的索引會(huì)大大簡(jiǎn)化和加速查找,下面小編來(lái)和大家一起學(xué)習(xí)一下知識(shí)2019-05-05在Windows平臺(tái)上升級(jí)MySQL注意事項(xiàng)
2008-01-01當(dāng)Mysql行鎖遇到復(fù)合主鍵與多列索引詳解
這篇文章主要給大家介紹了關(guān)于當(dāng)Mysql行鎖遇到復(fù)合主鍵與多列索引的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Mysql具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09連接遠(yuǎn)程mysql數(shù)據(jù)庫(kù)失敗常見(jiàn)原因及解決方案
這篇文章主要介紹了連接遠(yuǎn)程mysql數(shù)據(jù)庫(kù)失敗常見(jiàn)原因及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-07-07