共計 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 問一下細節