MySQL中group by與max()一起使用的坑
前言
國慶之間在進行一個消費項目切換時,發(fā)現(xiàn)用之前SQL語句導出的余額與客戶人員最近消費記錄所顯示的余額不一致,客戶人員又比較多,還好及時發(fā)現(xiàn)沒涼成大錯!現(xiàn)在來記錄一下。
一 GROUP BY的簡單介紹
GROUP BY顧名思義,group: 分組,by: 以…; 組合起中來就是以什么來分組。在mysql理解為以一個字段或多個字段來分組顯示結(jié)果集,如下。
數(shù)據(jù)表

執(zhí)行以下語句
select *from scgroup by sid
結(jié)果如下

結(jié)果以sid分組表示出來了,細心一點會發(fā)現(xiàn)分組后顯示的記錄是分組前第一條sid對應的值,執(zhí)行以下語句可以觀察到,如下。
SELECT *,GROUP_CONCAT(score) FROM sc GROUP BY sid;

二 MAX()的簡單介紹
MAX()是mysql里面的一個聚合函數(shù),用來取最大值的,如下。
SELECT MAX(score) FROM sc;

結(jié)果顯示score列的最大值,是沒有問題的。
三 group by與max()一起使用
要求:導出sid中score值最大的那條記錄(類似與導余額)
之前導余額用的語句類似以下SQL語句
SELECT sid,cid,MAX(score) as score FROM sc GROUP BY sid;

咋一看,score的值篩選出來是最大的,沒有問題,但是核對score最高值對應的記錄時發(fā)現(xiàn)是錯的,如下


四 原因
我分析了下原因,主要是由group by 分組后顯示的是第一條記錄,而max()取的是相同sid中的最大score值造成的,如下
SELECT sid,cid,score,GROUP_CONCAT(score) FROM sc GROUP BY sid;


相當于把第一條記錄的score值用最大值替換了,這顯然是不對的。
五 解決辦法
我的方法是先用子查詢把sid和其最大值score先查出來,然后再和原表匹配,如下
SELECT a.sid,a.cid,a.score FROM sc as a, (SELECT sid,max(score) as score FROM sc GROUP BY sid) as b WHERE a.sid=b.sid AND a.score=b.score

當然,解決方法不止這一種,具體情況具體討論。
到此這篇關于MySQL中group by與max()一起使用的坑的文章就介紹到這了,更多相關MySQL group by與max()一起使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
- MySQL GROUP BY多個字段的具體使用
- mysql的group?by使用及多字段分組
- mysql5.7同時使用group by和order by報錯問題
- MySQL group by和order by如何一起使用
- MySQL去重該使用distinct還是group by?
- MySQL中使用group by 是總是出現(xiàn)1055的錯誤(推薦)
- mysql中count(), group by, order by使用詳解
- Mysql中錯誤使用SQL語句Groupby被兼容的情況
- mysql使用GROUP BY分組實現(xiàn)取前N條記錄的方法
- Mysql中group by 使用中發(fā)現(xiàn)的問題
相關文章
Mysql主鍵UUID和自增主鍵的區(qū)別及優(yōu)劣分析
這篇文章主要介紹了Mysql主鍵UUID和自增主鍵的區(qū)別及優(yōu)劣分析,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-02-02
登錄MySQL時出現(xiàn)Authentication plugin ‘caching_sha2_pass
這篇文章主要介紹了登錄MySQL時出現(xiàn)Authentication plugin ‘caching_sha2_password‘ reported error錯誤的解決方案,文中通過圖文結(jié)合的形式講解的非常詳細,對大家的解決問題有一定的幫助,需要的朋友可以參考下2024-12-12
MySQL數(shù)據(jù)導入導出的三種辦法總結(jié)
當我們需要切換數(shù)據(jù)庫或備份數(shù)據(jù)時,導入和導出數(shù)據(jù)庫是一個常見的操作,下面這篇文章主要給大家介紹了關于MySQL數(shù)據(jù)導入導出的三種辦法,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2024-05-05
mysql 卡死 大部分線程長時間處于sending data的狀態(tài)
首先說明一下,這是個無頭的案子,雖然問題貌似解決了,不過到現(xiàn)在我也沒有答案,只是把這個問題拿出來晾晾2008-11-11
mysql 批量查詢?nèi)∶恳唤M最新一條數(shù)據(jù)
根據(jù)車牌號查詢最新的一條交車記錄的‘合同號’ ,這里只需要查詢‘合同號’這個字段,這篇文章主要介紹了mysql 批量查詢?nèi)∶恳唤M最新一條數(shù)據(jù),需要的朋友可以參考下2024-02-02

