MySQL中g(shù)roup 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

當然,解決方法不止這一種,具體情況具體討論。
到此這篇關(guān)于MySQL中g(shù)roup by與max()一起使用的坑的文章就介紹到這了,更多相關(guān)MySQL group by與max()一起使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 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中g(shù)roup by 使用中發(fā)現(xiàn)的問題
相關(guān)文章
史上最簡單的MySQL數(shù)據(jù)備份與還原教程(下)(三十七)
這篇文章主要為大家詳細介紹了史上最簡單的MySQL數(shù)據(jù)備份與還原教程下篇,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-10-10
MySQL8.0移除傳統(tǒng)的.frm文件原因及解讀
MySQL 8.0移除傳統(tǒng)的.frm文件,采用基于InnoDB的事務型數(shù)據(jù)字典,主要解決了元數(shù)據(jù)不一致、性能優(yōu)化、架構(gòu)簡化、增強功能支持、兼容性與升級問題,這一變革提高了數(shù)據(jù)庫的可靠性和性能,為未來的高級功能奠定了基礎2025-03-03
mysql實現(xiàn)合并同一ID對應多條數(shù)據(jù)的方法
這篇文章主要介紹了mysql實現(xiàn)合并同一ID對應多條數(shù)據(jù)的方法,涉及mysql GROUP_CONCAT函數(shù)的使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下2016-06-06
一步步教你如何使用mysql?binlog恢復數(shù)據(jù)
Binlog日志即binary?log,是二進制日志文件,有兩個作用,一個是增量備份,另一個是主從復制,下面這篇文章主要給大家介紹了關(guān)于如何使用mysql?binlog?恢復數(shù)據(jù)的相關(guān)資料,需要的朋友可以參考下2023-04-04
mysql實現(xiàn)將字符串轉(zhuǎn)化成int類型
這篇文章主要介紹了mysql實現(xiàn)將字符串轉(zhuǎn)化成int類型方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-08-08
解決遠程連接mysql很慢的方法(mysql_connect 打開連接慢)
有次同事提出開發(fā)使用的mysql數(shù)據(jù)庫連接很慢,因為我們的mysql開發(fā)數(shù)據(jù)庫是單獨一臺機器部署的,所以認為可能是網(wǎng)絡連接問題導致的。2011-07-07

