国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

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

2024-07-24 13:09:53
字體:
來源:轉載
供稿:網友

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

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

mysql分組,取記錄

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

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

mysql,GROUPBY,分組,取前N條記錄

結果:

mysql,GROUPBY,分組,取前N條記錄

方法一:

復制代碼 代碼如下:
SELECT a.id,a.SName,a.ClsNo,a.Score FROM aa a LEFT JOIN aa b ON a.ClsNo=b.ClsNo AND a.Score<b.Score group by a.id,a.SName,a.ClsNo,a.Score having count(b.id)<2 ORDER BY a.ClsNo,a.Score desc;

 

拆開分析:

<!--[if !supportLists]-->1、 <!--[endif]-->LEFT JOIN aa b ON a.ClsNo=b.ClsNo AND a.Score<b.Score

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

<!--[if !supportLists]-->2、 <!--[endif]-->group by a.id,a.SName,a.ClsNo,a.Score having count(b.id)<2
a.id,a.SName,a.ClsNo,a.Score可以代表一個學生(以學生分組),如果count(b.id)<2(成績超過你的人不能多于2個),那就只剩第一第二了。

方法二:

復制代碼 代碼如下:
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教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 山东省| 无锡市| 万盛区| 馆陶县| 宜宾市| 九江市| 闻喜县| 洛宁县| 曲水县| 盐城市| 铜梁县| 都昌县| 裕民县| 德阳市| 马山县| 扬中市| 白河县| 小金县| 大安市| 沛县| 河南省| 布尔津县| 苗栗县| 彩票| 长武县| 武乡县| 兰溪市| 巴彦淖尔市| 天柱县| 垣曲县| 汽车| 浦城县| 九江市| 河曲县| 哈巴河县| 开江县| 习水县| 英德市| 张家川| 甘南县| 抚顺市|