MySQL查询各科成绩前三名的记录及排名(不考虑成绩并列情况)

MySQL查询各科成绩前三名的记录及排名(不考虑成绩并列情况)

我的表结构:

先放代码

-- 查询各科成绩前三名的记录(不考虑成绩并列情况)

SELECT

sc1.`s_id`,

sc1.`c_id`,

sc1.`s_score`,

(SELECT

COUNT(*)

FROM

score sc3

WHERE

sc3.`c_id` = sc1.`c_id`

AND sc3.`s_score` > sc1.`s_score`

)+1 AS rank

FROM

score sc1

LEFT JOIN

score sc2

ON

sc1.`c_id` = sc2.`c_id`

AND sc1.`s_score` < sc2.`s_score`

GROUP BY

sc1.`c_id`,

sc1.`s_id`,

sc1.`s_score`

HAVING

COUNT(sc2.`s_id`) <= 2

ORDER BY

sc1.`c_id`,

sc1.`s_score` DESC

思路:

首先是创建相同的sc1和sc2,根据sc1.c_id左外连接在一起,并且条件是

FROM

score sc1

LEFT JOIN

score sc2

ON

sc1.`c_id` = sc2.`c_id`

AND sc1.`s_score` < sc2.`s_score`

-- 意思是在sc2找出相同课程但分数比sc1更高的行

这时脑海里应该有这么个图了(脑海里排序之后):

可以看到右边sc2列的都是分数大于sc1的情况

然后就可以进行三次分组,

GROUP BY

sc1.`c_id`,

sc1.`s_id`,

sc1.`s_score`

三次分组之后就是得到上面那个图的每个红色框框缩为一行的情况

然后就应该只能sc2中允许有两个以下的人比sc1高对吧,如果有3个比sc1高那就是第四名了,所以分组是有条件的

HAVING

COUNT(sc2.`s_id`) <= 2

好,到目前为止我们已经找出了每科前三的各行数据了,接下来排序整理就可以得到最终结果了

ORDER BY

sc1.`c_id`,

sc1.`s_score` DESC

最终结果:

另外,如果要增加排名的话,可以在查询结果集添加

(SELECT

COUNT(*)

FROM

score sc3

WHERE

sc3.`c_id` = sc1.`c_id`

AND sc3.`s_score` > sc1.`s_score`

)+1 AS rank

找出比同课程sc1.s_score高分的人数+1就是排名了,最终结果:

MySQL查询各科成绩前三名的记录及排名(不考虑成绩并列情况)相关教程

慢查询与分析

慢查询与分析 一慢查询 set global log_output = 'FILE,TABLE'; set global slow_query_log = 'ON';set global long_query_time =0.001;set GLOBAL log_queries_not_using_indexes = 'ON'; //没有使用索引的字段SELECT * from `mysql`.slow_log;//查看慢查询

mybatis--mybatis的介绍(模糊查询,配置文件的使用,注意事项)

mybatis--mybatis的介绍(模糊查询,配置文件的使用,注意事项) mybatis (1)Mybatis是什么? MyBatis 本是apache的一个开源项目iBatis,是一个基于Java的持久层框架 (2)Mybatis有什么特点? 1 最简单安装只要两个jar文件+配置几个sql映射文件 2 sql写在x

docker这样配置mysql数据库的映射是连不上的,坑!!!

docker这样配置mysql数据库的映射是连不上的,坑!!! docker这样配置mysql数据库的映射是连不上的,坑!!! 因为我docker中已经安装了一个mysql了如图: 但因为版本是最新的latest,而我现在要装一个5.5版本的mysql. 开始觉得挺简单,重新开一个容器就可以

Managing Big Data with MySQL学习笔记

Managing Big Data with MySQL学习笔记 Managing Big Data with MySQL学习笔记 Intro Week 1 How Relational Databases Help Solve Those Problems Database Design Tools Entity-Relationship Diagram Relational Schemas SQL: 关系型数据库( MySQL, Terada

mysql常用的函数

mysql常用的函数 1、IF(expr1,expr2,expr3)函数: 如果 expr1 是TRUE ,则 IF()的返回值为expr2; 否则返回值则为 expr3。 IF() 的返回值为数字值或字符串值,具体情况视其所在语境而定。 例: 2、IFNULL(expr1,expr2)函数: 如果expr1 不为 NULL,则 IFNULL()

Mysql优化

Mysql优化 一、优化思路: 1、设计3NF即表设计要满足三范式。 2、优化配置文件参数(my.ini|my.cnf)。 3、使用存储过程、视图、触发器,结合定时任务。 4、分隔表:水平分隔、垂直分隔。 5、读写分离。 6、增量备份:对无用的历史数据进行定期备份。 7、sql语

mysql基础三 触发器

mysql基础三 触发器 商品表 -- Table goods DDL: CREATE TABLE goods ( gid int(11) NOT NULL, name varchar(20) DEFAULT NULL, num smallint(6) DEFAULT NULL, PRIMARY KEY ( gid ) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 订单表 -- Table orders DDL: CR

ES 实现实时从Mysql数据库中读取热词,停用词

ES 实现实时从Mysql数据库中读取热词,停用词 IK分词器虽然自带词库 但是在实际开发应用中对于词库的灵活度的要求是远远不够的,IK分词器虽然配置文件中能添加扩展词库,但是需要重启ES 这章就当写一篇扩展了 其实IK本身是支持热更新词库的,但是需要我感觉不是很

MySQL 查询学生的总成绩并进行排名_MySQL查询各科成绩前三名的记录及排名(不考虑成绩并列情况)...相关推荐

  1. mysql查询各科成绩前三名的记录,sql查询各科成绩前三名----详述过程,思路清晰不烧脑...

    使用mysql.hive查询各科成绩前三名 一.建表造数据 建表: create table scores( name varchar(100), subject varchar(100), scor ...

  2. mysql查询各科成绩前三名的记录_mysql巧用连表查询各科成绩前三名

    下列是各表的详情,不想自己建表的同学可以直接copy code,数据随意. 创建表成绩详情表: CREATE TABLE score ( id int(10) NOT NULL AUTO_INCREM ...

  3. MySQL查学生年龄30到40之间_MYSQL查询练习 1

    -- 查询练习 1------------ CREATE TABLEstu ( sidCHAR(6), snameVARCHAR(50), ageINT, genderVARCHAR(50) );IN ...

  4. 16. 查询学生的总成绩,并进行排名,总分重复时保留名次空缺

    16. 查询学生的总成绩,并进行排名,总分重复时保留名次空缺 第一步:首先查出每个学生的总成绩 SELECT sid, SUM(score) FROM sc GROUP BY sid 第二步: 将第一 ...

  5. mysql查询班级作业提交情况_MySQL中查询获取每个班级成绩前三名的学生信息

    标签: 今天有同事说到了怎么MySQL中查询获取每个班级成绩前三名的学生信息,在网上查了查,然后写出代码,很快就OK了. CREATE TABLE t_testscore(    pk_id INT ...

  6. python计算选手最后得分并取出前三名_MySQL中查询获取每个班级成绩前三名的学生信息...

    今天有同事说到了怎么MySQL中查询获取每个班级成绩前三名的学生信息,在网上查了查,然后写出代码,很快就OK了. CREATE TABLE t_testscore(    pk_id INT PRIM ...

  7. Mysql查询各科成绩前三名并分别排序

    Mysql查询各科成绩前三名并分别排序 这个问题是之前1个朋友学mysql他们老师布置的作业,一开始我没有做过,而且刚出来做开发很多学过的东西都忘记了. 表结构如下: 一开始我是这样写的: selec ...

  8. sql查询成绩最高分_sql查询各科成绩前三名----详述过程,思路清晰不烧脑!

    一.建表造数据 建表: create table scores( name varchar(100), subject varchar(100), score int ); 插入数据: insert ...

  9. sql查询各科成绩前三名----详述过程,思路清晰不烧脑!

    一.建表造数据 建表: create table scores( name varchar(100), subject varchar(100), score int ); 插入数据: insert ...

最新文章

  1. python 自动化办公 案例_python自动化工具之pywinauto实例详解
  2. R语言glm拟合logistic回归模型实战:基于glm构建逻辑回归模型及模型系数统计显著性分析、每个预测因子对响应变量的贡献
  3. jQuery以JSONP的访问调用一个WCF REST服务
  4. WebService的基本概念:java webservice,什么是webservice
  5. UNDO Tablespace
  6. hashmap扩容线程安全问题_HashMap在1.7 1.8中的线程安全问题
  7. 扎克伯格为提高员工工作效率,亲自做了这 26 张 PPT ,值得收藏
  8. 详解PWM原理、频率与占空比
  9. SEO网站搜索引擎优化软件
  10. 获取两个指定数之间的随机数(万能公式)
  11. Android 图片虚化,虚化图片,模糊图片
  12. 暴力枚举Gmail邮箱地址的新姿势
  13. 好的重疾险原来长这样!你被骗了这么多年...
  14. Linux-Udev机制
  15. 大型医院影像PACS系统三维重建技术(获取数据、预处理、配准、重建和可视化)
  16. Swiper Social项目(一): Swiper Social项⽬概览及项⽬⽬标(类似于探探)
  17. 千锋教育威哥学Java教程之Java基础学习路线
  18. mysql locate不走索引_面试--mysql的模糊查询优化、like、locate、position、instr、find_in_set...
  19. Stata17安装及常用命令使用教程
  20. unity3d 切换场景过度动画

热门文章

  1. 如何阅读一本书-【未排版!】
  2. [每日一氵] C语言函数不要返回数组地址
  3. 520,送你四种Python画玫瑰的方法
  4. 卸载Axure7.0
  5. 使用Python代码实现一个简单的分子动力学模拟程序
  6. 记录四川移动盒子打开adb命令的方法 型号:UNT401H
  7. 大数据开发和大数据分析的区别?
  8. 今天分享一个Python游戏:简约飞机模拟器
  9. 计算机专业硕士毕业论文,计算机专业硕士毕业论文致谢范文
  10. 1447D Catching Cheaters