mysql使用GROUP BY分組實現取前N條記錄的方法_MySQL

本文實例講述了mysql使用group by分組實現取前n條記錄的方法。分享給大家供大家參考,具體如下:

mysql中GROUP BY分組取前N條記錄實現

mysql分組,取記錄

GROUP BY之后如何取每組的前兩位下面我來講述mysql中GROUP BY分組取前N條記錄實現方法。

這是測試表(也不知道怎么想的,當時表名直接敲了個aa,汗~~~~):

mysql使用GROUP BY分組實現取前N條記錄的方法_MySQL

結果:

mysql使用GROUP BY分組實現取前N條記錄的方法_MySQL

方法一:

代碼如下:

SELECT a.id,a.SName,a.ClsNo,a.Score FROM aa a LEFT JOIN aa b ON a.ClsNo=b.ClsNo AND a.Score

拆開分析:

1、 LEFT JOIN aa b ON a.ClsNo=b.ClsNo AND a.Score

同一個班級(每個班級四個人),分數比當前學生高的記錄,那就意味這成績墊底的學生,將會產生三條記錄

2、 group by a.id,a.SName,a.ClsNo,a.Score having count(b.id) a.id,a.SName,a.ClsNo,a.Score可以代表一個學生(以學生分組),如果count(b.id)

方法二:

代碼如下:

SELECT * FROM aa a WHERE 2>(SELECT COUNT(*) FROM aa WHERE ClsNo=a.ClsNo and Score>a.Score) ORDER BY a.ClsNo,a.Score DESC;

這個我覺得是比較有意思的,取每一條記錄,判斷同一個班級,大于當前成績的同學是不是小于2個人。

方法三:

代碼如下:

SELECT * FROM aa WHERE id IN (SELECT id FROM aa WHERE ClsNo=a.ClsNo ORDER BY Score DESC LIMIT 2) ORDER BY a.ClsNo,a.Score DESC;

這種方式進過測試不通過,ERROR 1235 (42000): This version of MySQL doesn’t yet support ‘LIMIT & IN/ALL/ANY/SOME subquery’ ,不能在這幾個子查詢中使用limit。

更多關于MySQL相關內容感興趣的讀者可查看本站專題:《MySQL日志操作技巧大全》、《MySQL事務操作技巧匯總》、《MySQL存儲過程技巧大全》、《MySQL數據庫鎖相關技巧匯總》及《MySQL常用函數大匯總》

希望本文所述對大家MySQL數據庫計有所幫助。

? 版權聲明
THE END
喜歡就支持一下吧
點贊5 分享