前言: 最近突然被问到了一张学生成绩表,怎么求出各科前三名,当时想了很久也不会,于是现在记录下来。 参考了2篇博客: 1,mysql查询各科成绩前三名_No.03 数据库经典面试之如何取出每科成绩的前
最近突然被问到了一张学生成绩表,怎么求出各科前三名,当时想了很久也不会,于是现在记录下来。
参考了2篇博客:
1,mysql查询各科成绩前三名_No.03 数据库经典面试之如何取出每科成绩的前三名
2,MySQL 查询各科前三名(考虑成绩并列情况)
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');
SELECTS1.*,(SELECTCOUNT( 1 ) FROM`test_course` S2 WHERES1.CLASS = S2.CLASS AND S2.GRADE > S1.GRADE )+ 1 AS count FROM`test_course` S1 HAVINGcount <= 3 ORDER BYS1.CLASS,count ;
SELECTt1.*FROMtest_course t1LEFT JOIN ( SELECT * FROM test_course ) t2 ON t1.class = t2.class AND t1.grade < t2.grade GROUP BYt1.id,class,grade HAVINGcount( 1 ) < 3 ORDER BYt1.class,gradeDESC
来源地址:https://blog.csdn.net/weixin_42596407/article/details/129860289
--结束END--
本文标题: MySQL查询各科前3名
本文链接: https://www.lsjlt.com/news/489293.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-05-16
2024-05-16
2024-05-16
2024-05-15
2024-05-15
2024-05-15
2024-05-15
2024-05-15
2024-05-15
2024-05-15
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0