mysql查询各科成绩前三名_No.03 数据库经典面试之如何取出每科成绩的前三名
数据库经典面试题之如何取出每科成绩的前三名实现的原理
代码的实现
总结
一、实现的原理
首先,如果不考虑并列的情况,直接orderby排序后limit3就可以取出前三条。但是如果有多个并列的学科,mysql默认情况下分组后指标字段必须使用汇总函数进行汇总,那么limit3只能取出三条成绩,即每科一条。
本题实现的原理是首先将每科成绩分别进行排名,然后取出每科成绩排名前三的成绩即可。
二、代码的实现
● 创建测试表test_course
CREATE TABLE `test_course` (
`id` varchar(10) NOT NULL,
`class` varchar(1000) DEFAULT NULL,
`grade` int(100) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
● 插入数据
INSERT INTO test.`test_course` VALUES ('1','yuwen','100');
INSERT INTO test.`test_course` VALUES ('10','yingyu','16');
INSERT INTO test.`test_course` VALUES ('11','yingyu','85');
INSERT INTO test.`test_course` VALUES ('12','yingyu','95');
INSERT INTO test.`test_course` VALUES ('2','yuwen','80');
INSERT INTO test.`test_course` VALUES ('3','shuxue','60');
INSERT INTO test.`test_course` VALUES ('4','shuxue','100');
INSERT INTO test.`test_course` VALUES ('5','shuxue','95');
INSERT INTO test.`test_course` VALUES ('6','yuwen','85');
INSERT INTO test.`test_course` VALUES ('7','shuxue','16');
INSERT INTO test.`test_course` VALUES ('8','yuwen','15');
INSERT INTO test.`test_course` VALUES ('9','yingyu','15');
SELECT * FROM test.`test_course`;
查询结果为
● 查出每个科目的全部排名
SELECT S1.*,(SELECT COUNT(1) FROM TEST.`test_course` S2 WHERE S1.CLASS = S2.CLASS AND S2.GRADE > S1.GRADE)+1
AS "paiming"
FROM TEST.`test_course` S1 ORDER BY S1.CLASS,paiming;
查询结果为
● 取出每个科目的前三名
SELECT S1.*,(SELECT COUNT(1) FROM TEST.`test_course` S2 WHERE S1.CLASS = S2.CLASS AND S2.GRADE > S1.GRADE)+1
AS "paiming"
FROM TEST.`test_course` S1 HAVING paiming <=3 ORDER BY S1.CLASS,paiming;
查询结果为
三、总结mySQL中order by进行排序,默认为升序asc,降序为desc。
mySQL中分组关键字为group by,分组后过滤使用having。
mySQL中使用分组group by后,查询字段如果是维度,必须放在group by中,如果是指标,必须使用聚合函数。
最后附上mysql执行顺序一图:
mysql查询各科成绩前三名_No.03 数据库经典面试之如何取出每科成绩的前三名相关推荐
- mysql统计每个科目平均成绩_No.03 数据库经典面试之如何取出每科成绩的前三名...
数据库经典面试题之如何取出每科成绩的前三名 实现的原理 代码的实现 总结 一.实现的原理 首先,如果不考虑并列的情况,直接orderby排序后limit3就可以取出前三条.但是如果有多个并列的学科,m ...
- Mysql查询各科成绩前三名并分别排序
Mysql查询各科成绩前三名并分别排序 这个问题是之前1个朋友学mysql他们老师布置的作业,一开始我没有做过,而且刚出来做开发很多学过的东西都忘记了. 表结构如下: 一开始我是这样写的: selec ...
- 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 查询blob数据很慢_blob存入数据库很慢
{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...
- mysql查询各科前3_MySQL 查询各科前三的数据
方法一: SELECT sc.*,c.` Cname` ,COUNT(sc.C) FROM sc LEFT JOIN sc a ON sc.C = a.C AND sc.score >= a.s ...
- MySQL查询实验报告_SQL实验二:数据库查询实验报告
实验二 数据库的查询实验 一. 实验目的和要求 (1)掌握SQL Server查询分析器的使用方法,加深对SQL和Transact-SQL语言的查询语句的理解. (2)熟练掌握简单表的数据查询.数据排 ...
- mysql查询工资最高三人6_MySQL T6 数据库操作——查询(三)高级查询
复习 算术运算符:+ - * / % [针对数值型,select子句,where子句] 查询大于18岁的学生,学生表内存的是生日 birthday where year(sysdate()) - ye ...
- mysql 查询两张表结构相同的数据库_利用反射处理多个表结构相同的数据的查询和数据库表的关联...
最近做一个项目,需要对人口数据进行查询,但是人口数据分布在不同的街道表中,首先进行了数据表结构的统一,每个数据表以街道名开头,然后其他的名字都一样 前期将各个表中的字段也进行了统一 抽象出一张字典表 ...
- mysql查询库表变更信息_PythonMySQL进行数据库表变更和查询
这篇文章主要介绍了Python MySQL进行数据库表变更和查询的相关资料,需要的朋友可以参考下 Python连接MySQL,进行数据库表变更和查询: python mysql insert dele ...
最新文章
- ASP:HTML在线编辑器的调用方法和使用方法详解
- B09_NumPy迭代数组(控制遍历顺序,修改数组中元素的值,使用外部循环,广播迭代)
- Unix awk使用手册
- 三菱fx5u编程手册_FX5U系列PLC控制伺服3种方式
- jdbc url写法(集群)
- java stream flatmap
- 解决读取数据库里面中文字符乱码的问题
- 链表中倒数第 k 个节点
- 解决jsp页面数据传递乱码问题
- 【计算电磁学】真空中电磁波传播的MATLAB一维FDTD仿真程序
- 2022年聚合工艺考试试卷及聚合工艺考试总结
- 用Podman来代替Docker Desktop
- 重庆医科大学赵浏阳教授招收博士、招聘博士后
- 记英语单词中第一个易混淆的单词组attain achieve acquire
- 文件名太长无法删除怎么办
- 自定义桌面launcher-android
- SLF4J: Actual binding is of type [ch.qos.logback.classic.util.ContextSelecto
- Running pipenv gives TypeError: 'module' object is not callable
- 上海理工大学854C语言真题,2018年上海理工大学医疗器械与食品院854C程序设计考研核心题库...
- 2001-2020年全国31省城镇居民人均可支配收入/居民实际收入水平