热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

mysql排名前十的学生_mysql学生成绩排名,分组取前N条记录

转载https:blog.csdn.netjslcylcyarticledetails72627762score表:CREATETABLEscore(student_idint(1

转载  https://blog.csdn.net/jslcylcy/article/details/72627762

score表:

CREATE TABLE `score` (

`student_id` int(10) DEFAULT NULL,

`class_id` int(10) DEFAULT NULL,

`score` int(5) DEFAULT NULL

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci

1

2

3

4

5

字段 student_id 学生 id ,class_id:班级 id ,score:分数

数据准备:

insert into score values(1,1,100),(2,1,93),(3,1,89),(4,1,96),(5,2,98),(6,2,97),(7,2,90),(8,2,88),(9,1,96);

表结构如下:

mysql> select * from score;

+------------+----------+-------+

| student_id | class_id | score |

+------------+----------+-------+

| 1 | 1 | 100 |

| 2 | 1 | 93 |

| 3 | 1 | 89 |

| 4 | 1 | 96 |

| 5 | 2 | 98 |

| 6 | 2 | 97 |

| 7 | 2 | 90 |

| 8 | 2 | 88 |

| 9 | 1 | 96 |

+------------+----------+-------+

9 rows in set (0.00 sec)

1.取每个班级前两名的学生(包含并列第二名)

mysql> select * from score s1 where (select count(0) from score s2 where s1.class_id = s2.class_id and s1.score

+------------+----------+-------+

| student_id | class_id | score |

+------------+----------+-------+

| 1 | 1 | 100 |

| 4 | 1 | 96 |

| 5 | 2 | 98 |

| 6 | 2 | 97 |

| 9 | 1 | 96 |

+------------+----------+-------+

5 rows in set (0.00 sec)

sql 解释:取表 s1的数据,这些数据中 class_id 和 s2 class_id相同的数据下,比 s1的 score 分数大的 s2的数据条目必须小于2

或者使用 left join 的方式:

mysql> select s1.* from score s1 left join score s2 on s1.class_id = s2.class_id and s1.score

+------------+----------+-------+

| student_id | class_id | score |

+------------+----------+-------+

| 1 | 1 | 100 |

| 4 | 1 | 96 |

| 9 | 1 | 96 |

| 5 | 2 | 98 |

| 6 | 2 | 97 |

+------------+----------+-------+

5 rows in set (0.00 sec)

2.取学生分数数据且表示排名

mysql> select s1.*,(select count(0) + 1 from score s2 where s2.score > s1.score)rank from score s1;

+------------+----------+-------+------+

| student_id | class_id | score | rank |

+------------+----------+-------+------+

| 1 | 1 | 100 | 1 |

| 2 | 1 | 93 | 6 |

| 3 | 1 | 89 | 8 |

| 4 | 1 | 96 | 4 |

| 5 | 2 | 98 | 2 |

| 6 | 2 | 97 | 3 |

| 7 | 2 | 90 | 7 |

| 8 | 2 | 88 | 9 |

| 9 | 1 | 96 | 4 |

+------------+----------+-------+------+

9 rows in set (0.00 sec)

sql解释:将 s2中比s1中分数大的条目显示出来就行了(count 时需要加1)

3.取学生成绩数据,表示班级排名

mysql> select s1.*,(select count(0) + 1 from score s2 where s1.class_id = s2.class_id and s2.score > s1.score)rank from score s1 order by class_id,rank;

+------------+----------+-------+------+

| student_id | class_id | score | rank |

+------------+----------+-------+------+

| 1 | 1 | 100 | 1 |

| 4 | 1 | 96 | 2 |

| 9 | 1 | 96 | 2 |

| 2 | 1 | 93 | 4 |

| 3 | 1 | 89 | 5 |

| 5 | 2 | 98 | 1 |

| 6 | 2 | 97 | 2 |

| 7 | 2 | 90 | 3 |

| 8 | 2 | 88 | 4 |

+------------+----------+-------+------+

9 rows in set (0.00 sec)

与之前一样,但过滤条件中只需要计算班级相同的数据条目

4.取每个班级前两名(并列的只取前面的数据)



推荐阅读
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • 本文详细介绍了在ASP.NET中获取插入记录的ID的几种方法,包括使用SCOPE_IDENTITY()和IDENT_CURRENT()函数,以及通过ExecuteReader方法执行SQL语句获取ID的步骤。同时,还提供了使用这些方法的示例代码和注意事项。对于需要获取表中最后一个插入操作所产生的ID或马上使用刚插入的新记录ID的开发者来说,本文提供了一些有用的技巧和建议。 ... [详细]
  • 本文介绍了游标的使用方法,并以一个水果供应商数据库为例进行了说明。首先创建了一个名为fruits的表,包含了水果的id、供应商id、名称和价格等字段。然后使用游标查询了水果的名称和价格,并将结果输出。最后对游标进行了关闭操作。通过本文可以了解到游标在数据库操作中的应用。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • ALTERTABLE通过更改、添加、除去列和约束,或者通过启用或禁用约束和触发器来更改表的定义。语法ALTERTABLEtable{[ALTERCOLUMNcolu ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • MySQL外键1对多问题的解决方法及实例
    本文介绍了解决MySQL外键1对多问题的方法,通过准备数据、创建表和设置外键关联等步骤,实现了用户分组和插入数据的功能。详细介绍了数据准备的过程和外键关联的设置,以及插入数据的示例。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
author-avatar
手机用户2502884923
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有