當前位置:
首頁 >
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的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 浅析索引失效(二)
- 下一篇: 大剑无锋之已知后续遍历bfegcda,中