700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > MySQL 查询学生的总成绩并进行排名_MySQL查询各科成绩前三名的记录及排名(不考虑成

MySQL 查询学生的总成绩并进行排名_MySQL查询各科成绩前三名的记录及排名(不考虑成

时间:2018-12-12 12:46:57

相关推荐

MySQL 查询学生的总成绩并进行排名_MySQL查询各科成绩前三名的记录及排名(不考虑成

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|f)。 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查询各科成绩前三名的记录及排名(不考虑成绩并列情况)...

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。