日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

mysql中实现over partiton by,进行分组排序取topN

發布時間:2024/2/28 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql中实现over partiton by,进行分组排序取topN 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

創表?

CREATE TABLE `t1` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(255) DEFAULT NULL,`class` varchar(255) DEFAULT NULL,`score` int(255) DEFAULT NULL,PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8mb4;

插入數據

INSERT INTO `t1` VALUES ('1', 'george', '一班', '100'); INSERT INTO `t1` VALUES ('2', 'georgedage', '一班', '98'); INSERT INTO `t1` VALUES ('3', 'lucy', '一班', '89'); INSERT INTO `t1` VALUES ('4', 'lili', '一班', '58'); INSERT INTO `t1` VALUES ('5', '魯智深', '二班', '97'); INSERT INTO `t1` VALUES ('6', '武松', '二班', '99'); INSERT INTO `t1` VALUES ('7', '阮小二', '二班', '85'); INSERT INTO `t1` VALUES ('8', '宋江', '二班', '46'); INSERT INTO `t1` VALUES ('9', '關羽', '三班', '99'); INSERT INTO `t1` VALUES ('10', '劉備', '三班', '78'); INSERT INTO `t1` VALUES ('11', '張飛', '三班', '92'); INSERT INTO `t1` VALUES ('12', '趙云', '三班', '100');

表數據展示

簡單的分組內進行排序

select * from t1 group by class,score order by class,score desc

結果展示

那么分組排序后進行取top怎么做呢?

兩種寫法,歡迎交流~

select t.id,t.name,t.class,t.score from t1 t left join t1 t_left on t.class = t_left.class and t.score < t_left.score group by t.id,t.name,t.class,t.score having count(t.id)<3 order by t.class,t.score desc select t.id,t.name,t.class,t.score from t1 t where (select count(*) from t1 where class = t.class and score > t.score) < 3 order by t.class,t.score desc

結果展示

如果還有什么好用的方法,歡迎留言!

總結

以上是生活随笔為你收集整理的mysql中实现over partiton by,进行分组排序取topN的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。