创表

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相关推荐

  1. HQL语句使用row_number() over(partition by),分组排序取topN

    在 mysql中实现over partiton by,进行分组排序取topN https://georgedage.blog.csdn.net/article/details/103557651 使用 ...

  2. mysql 分组排序取前n_mysql分组排序取前N条记录的最简洁的单条sql ! | 学步园

    -- mysql分组排序取前N条记录的最简洁的单条sql. use test; drop table if exists test; create table test ( id int primar ...

  3. mysql分组排序取第一条记录

    方式1:内层使用DISTINCT SELECTtype,senderName,subTitle FROM(SELECT DISTINCTTYPE AS type,SENDER_USERNAME AS ...

  4. MySQL 如何实现 Oracle 的 row_number() over() 分组排序功能

    文章目录 Oracle 的分组排序 MySQL 的分组排序 分析需求 创建模拟数据 SQL 实现 结果演示 Oracle 的分组排序 Oracle 的分组排序函数的语法格式如下: ROW_NUMBER ...

  5. mysql分组后再分组_全网最全的mysql分组后取topN的解答

    准备好sql45题的成绩表! create table SC( SId varchar(10) comment "学生ID", CId varchar(10) comment &q ...

  6. mysql 分组排序 取前top n

    力扣mysql 题目为: Employee 表包含所有员工信息,每个员工有其对应的工号 Id,姓名 Name,工资 Salary 和部门编号 DepartmentId . +----+-------+ ...

  7. oracle和mysql分组排序取第一条数据

    场景 需求 查每个人的Orderstr 是1 的数据,并保证name不重复 oracle select *   from (SELECT a.*, row_number() over(partitio ...

  8. mysql常用排序规则_在MySQL中,我应该选择哪种排序规则?

    当我通过phpmyadmin创建一个新的mysql数据库时,我可以选择排序规则(例如-default.armscii8.ascii-).和UTF-8).我知道的是utf-8,因为我总是在HTML源代码 ...

  9. SQL:分组排序取top N

    1 法一 在hive上查询 select a.course,a.score from( select course,score,row_number() over(partition by cours ...

最新文章

  1. 1052 Linked List Sorting
  2. 从“小”培养AI安全意识:OpenAI开源具有安全约束的RL训练工具
  3. 机器学习门户网站——单变量线性回归
  4. [转]double free or corruption (!prev): 0x080644c8 ***
  5. 技术债! 怎样简洁高效的实现多个 Enum 自由转换
  6. java futuretask 实例_java 使用Callable+FutureTask获取执行结果
  7. php apache 配置后不能正常显示html文件的解决方法
  8. 第十章 深度强化学习-Prioritized Replay DQN
  9. 帆软报表填报成功后实时刷新当前页面
  10. Cohen's d 效应量计算
  11. 计算机网络实验四协议分析心得,计算机网络原理实验_使用网络协议分析仪Wireshark...
  12. 基于机器学习的DGA域名检测
  13. php全局标签,dedecms的全局标签是什么意思
  14. 突破限制轻松下载网盘的文件,免登陆使用,速度也不错!
  15. 中国涂料工业协会:世界十大涂料品牌2011年度报告
  16. android测试类--Method setUp in android.test.AndroidTestCase not mocked
  17. 微信小程序的wx.chooseImage如何把图片传给后端
  18. dp主机_怎样设置显示器DP接口信号优先?
  19. CLCL-多重剪切板
  20. Linux 环境下iSCSI Target 与 Initiator 配置

热门文章

  1. 公司网站Silverlight版^_^
  2. 2021牛客多校10 - Browser Games(哈希)
  3. HDU - 5572 An Easy Physics Problem(几何-碰撞问题)
  4. 让软件不在添加删除程序_功能强大却鲜为人知的四款软件,一但发现就无法自拔...
  5. Python基础01-变量及数据类型
  6. 判断出栈序列是否合法(c语言实现)
  7. ST算法解决RMQ问题
  8. Little Pony and Elements of Harmony(CF 453 D)
  9. 搭建 LEGO EV3 的 PyCharm Python 开发环境
  10. Ansible:Ansibl项目生产环境快速布局