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|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查询各科成绩前三名的记录及排名(不考虑成绩并列情况)...相关推荐
- mysql查询各科成绩前三名的记录,sql查询各科成绩前三名----详述过程,思路清晰不烧脑...
使用mysql.hive查询各科成绩前三名 一.建表造数据 建表: create table scores( name varchar(100), subject varchar(100), scor ...
- mysql查询各科成绩前三名的记录_mysql巧用连表查询各科成绩前三名
下列是各表的详情,不想自己建表的同学可以直接copy code,数据随意. 创建表成绩详情表: CREATE TABLE score ( id int(10) NOT NULL AUTO_INCREM ...
- MySQL查学生年龄30到40之间_MYSQL查询练习 1
-- 查询练习 1------------ CREATE TABLEstu ( sidCHAR(6), snameVARCHAR(50), ageINT, genderVARCHAR(50) );IN ...
- 16. 查询学生的总成绩,并进行排名,总分重复时保留名次空缺
16. 查询学生的总成绩,并进行排名,总分重复时保留名次空缺 第一步:首先查出每个学生的总成绩 SELECT sid, SUM(score) FROM sc GROUP BY sid 第二步: 将第一 ...
- mysql查询班级作业提交情况_MySQL中查询获取每个班级成绩前三名的学生信息
标签: 今天有同事说到了怎么MySQL中查询获取每个班级成绩前三名的学生信息,在网上查了查,然后写出代码,很快就OK了. CREATE TABLE t_testscore( pk_id INT ...
- python计算选手最后得分并取出前三名_MySQL中查询获取每个班级成绩前三名的学生信息...
今天有同事说到了怎么MySQL中查询获取每个班级成绩前三名的学生信息,在网上查了查,然后写出代码,很快就OK了. CREATE TABLE t_testscore( pk_id INT PRIM ...
- Mysql查询各科成绩前三名并分别排序
Mysql查询各科成绩前三名并分别排序 这个问题是之前1个朋友学mysql他们老师布置的作业,一开始我没有做过,而且刚出来做开发很多学过的东西都忘记了. 表结构如下: 一开始我是这样写的: selec ...
- sql查询成绩最高分_sql查询各科成绩前三名----详述过程,思路清晰不烧脑!
一.建表造数据 建表: create table scores( name varchar(100), subject varchar(100), score int ); 插入数据: insert ...
- sql查询各科成绩前三名----详述过程,思路清晰不烧脑!
一.建表造数据 建表: create table scores( name varchar(100), subject varchar(100), score int ); 插入数据: insert ...
最新文章
- python 自动化办公 案例_python自动化工具之pywinauto实例详解
- R语言glm拟合logistic回归模型实战:基于glm构建逻辑回归模型及模型系数统计显著性分析、每个预测因子对响应变量的贡献
- jQuery以JSONP的访问调用一个WCF REST服务
- WebService的基本概念:java webservice,什么是webservice
- UNDO Tablespace
- hashmap扩容线程安全问题_HashMap在1.7 1.8中的线程安全问题
- 扎克伯格为提高员工工作效率,亲自做了这 26 张 PPT ,值得收藏
- 详解PWM原理、频率与占空比
- SEO网站搜索引擎优化软件
- 获取两个指定数之间的随机数(万能公式)
- Android 图片虚化,虚化图片,模糊图片
- 暴力枚举Gmail邮箱地址的新姿势
- 好的重疾险原来长这样!你被骗了这么多年...
- Linux-Udev机制
- 大型医院影像PACS系统三维重建技术(获取数据、预处理、配准、重建和可视化)
- Swiper Social项目(一): Swiper Social项⽬概览及项⽬⽬标(类似于探探)
- 千锋教育威哥学Java教程之Java基础学习路线
- mysql locate不走索引_面试--mysql的模糊查询优化、like、locate、position、instr、find_in_set...
- Stata17安装及常用命令使用教程
- unity3d 切换场景过度动画