SQL查询成绩表中的每科第三名

 题目要求

 表格数据

  • grade表
c_id c_no c_name
1 1 80
1 2 90
1 3 70
1 4 95
2 1 64
2 2 88
2 3 89
2 4 79
3 1 90
3 2 80
3 3 96
3 4 85
4 1 88
4 2 90
4 3 50
4 4 60
  • course表
c_id c_no c_name
1 001 C/C++
2 002 JAVA
3 003 Linux
4 004 数据库
  1. student表
s_id s_no s_name
1 001 gb
2 002 lly
3 003 pdl
4 004 lb

解题过程

  • 第一步 先根据成绩表得出每科每名学生的排名

查询代码

SELECTt1.*, (SELECTcount(*)FROMgrade t2WHEREt1.score <= t2.scoreAND t1.c_id = t2.c_id) AS rownum
FROMgrade t1

查询结果

c_id s_id score rownum
1 1 80 3
1 2 90 2
1 3 70 4
1 4 95 1
2 1 64 4
2 2 88 2
2 3 89 1
2 4 79 3
3 1 90 2
3 2 80 4
3 3 96 1
3 4 85 3
4 1 88 2
4 2 90 1
4 3 50 4
  • 第二步 将第一步所的表命名为t3 然后将表中rownum为3的查询出来 并按学科排序

查询代码

SELECT*
FROM(SELECTt1.*, (SELECTcount(*)FROMgrade t2WHEREt1.score <= t2.scoreAND t1.c_id = t2.c_id) AS rownumFROMgrade t1) t3
WHERErownum = 3
ORDER BYc_id

查询结果

c_id s_id score rownum
1 1 80 3
2 4 79 3
3 4 85 3
4 4 60 3
  • 第三步 对最终查询结果与 student cource 两表进行左连接

查询代码

SELECTstudent.s_no,student.s_name,course.c_name,grade_temp.score
FROM(SELECT*FROM(SELECTt1.*, (SELECTcount(*)FROMgrade t2WHEREt1.score <= t2.scoreAND t1.c_id = t2.c_id) AS rownumFROMgrade t1) t3WHERErownum = 3ORDER BYc_id,score DESC) grade_temp
LEFT JOIN course ON grade_temp.c_id = course.c_id
LEFT JOIN student ON grade_temp.s_id = student.s_id

查询结果

s_id s_name c_name score
001 gb C/C++ 80
004 lb JAVA 79
004 lb Linux 85
004 lb 数据库 60

附上表结构和表数据sql


SET FOREIGN_KEY_CHECKS=0;-- ----------------------------
-- Table structure for course
-- ----------------------------
DROP TABLE IF EXISTS `course`;
CREATE TABLE `course` (`c_id` int(11) NOT NULL,`c_no` varchar(20) NOT NULL,`c_name` varchar(255) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;-- ----------------------------
-- Records of course
-- ----------------------------
INSERT INTO `course` VALUES ('1', '001', 'C/C++');
INSERT INTO `course` VALUES ('2', '002', 'JAVA');
INSERT INTO `course` VALUES ('3', '003', 'Linux');
INSERT INTO `course` VALUES ('4', '004', '数据库');-- ----------------------------
-- Table structure for grade
-- ----------------------------
DROP TABLE IF EXISTS `grade`;
CREATE TABLE `grade` (`c_id` int(11) NOT NULL,`s_id` int(11) NOT NULL,`score` float NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;-- ----------------------------
-- Records of grade
-- ----------------------------
INSERT INTO `grade` VALUES ('1', '1', '80');
INSERT INTO `grade` VALUES ('1', '2', '90');
INSERT INTO `grade` VALUES ('1', '3', '70');
INSERT INTO `grade` VALUES ('1', '4', '95');
INSERT INTO `grade` VALUES ('2', '1', '64');
INSERT INTO `grade` VALUES ('2', '2', '88');
INSERT INTO `grade` VALUES ('2', '3', '89');
INSERT INTO `grade` VALUES ('2', '4', '79');
INSERT INTO `grade` VALUES ('3', '1', '90');
INSERT INTO `grade` VALUES ('3', '2', '80');
INSERT INTO `grade` VALUES ('3', '3', '96');
INSERT INTO `grade` VALUES ('3', '4', '85');
INSERT INTO `grade` VALUES ('4', '1', '88');
INSERT INTO `grade` VALUES ('4', '2', '90');
INSERT INTO `grade` VALUES ('4', '3', '50');
INSERT INTO `grade` VALUES ('4', '4', '60');-- ----------------------------
-- Table structure for student
-- ----------------------------
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (`s_id` int(11) NOT NULL,`s_no` varchar(20) NOT NULL,`s_name` varchar(255) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;-- ----------------------------
-- Records of student
-- ----------------------------
INSERT INTO `student` VALUES ('1', '001', 'gb');
INSERT INTO `student` VALUES ('2', '002', 'lly');
INSERT INTO `student` VALUES ('3', '003', 'pdl');
INSERT INTO `student` VALUES ('4', '004', 'lb');

SQL查询成绩表中的每科第三名相关推荐

  1. sql查询成绩表中每一科成绩最高的分数以及这个学生的名字,学科名

    前段时间面试的时候碰到这样一个面试题,因为很久没接触sql竟然没写出来. 如图有这样一张成绩表: 首先要理解group by 含义:"Group By"从字面意义上理解就是根据&q ...

  2. mysql 学生成绩最高分的学科_sql查询成绩表中每一科成绩最高的分数以及这个学生的名字,学科名,面试的时候碰到的问题...

    前段时间面试的时候碰到这样一个面试题,因为很久没接触sql竟然没写出来. 如图有这样一张成绩表: 首先要理解group by 含义:"Group By"从字面意义上理解就是根据&q ...

  3. Sql查询一个表中除了某个字段以外的所有字段的方法

    declare @name varchar(100) declare @sql varchar(1000)SET @sql='select ' DECLARE C11 CURSOR FORselect ...

  4. sql查询数据库表中重复数值

    sql查询数据库表中重复数值 -- 查询表中id重复的值 select id from 表名 group by id having count(*) > 1--查询表中的重复记录,重复记录是根据 ...

  5. 查询成绩表中同时考了科目1和科目2,并且科1大于科2的学生

    select * from sc; -- 01~04号学生各考了01.02.03科,05号考了01.02科,06号考了01.03科,07号学生考了02.03科, -- 那么会产生(1*3)*3*4+( ...

  6. SQL查询一个表中类别字段中Max()最大值对应的记录

    问题是: 数据库有一个表 code,里面有个点击量字段click_num和一个类别字段kind以及其它信息字段, 现在要搜出每个类别中点击量最大的那条记录,如果是10个类别,那么结果应该是10条记录, ...

  7. mysql查询成绩表中课程编号升序,Python 之 MySql 每日一练 232——查询每门课程的平均成绩...

    一.表名和字段 –1. 学生表 student (s_id,s_name,s_birth,s_sex) –学生编号,学生姓名,出生年月,学生性别 –2. 课程表 course (c_id,c_name ...

  8. mysql查库存_如何用SQL查询Product表中库存最低的6种商品

    展开全部 使用代码:复 DELETE的语法是制: DELETEFROMtable_name. WHERE条件. DELETE后面不跟列名.2113 INSERT一般都用: INSERTINTOtabl ...

  9. SQL查询学生表中每课大于85分的同学名称

    SQL语句 SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0;-- ---------------------------- -- Table structu ...

最新文章

  1. linux系统安全优化
  2. 密码错误Neo.ClientError.Security.Unauthorized: The client is unauthorized due to authentication failure
  3. 实战3--设计管理模块, 第4步, 新增模块, 部门管理
  4. 计算机应用技术自考知识点,自考计算机应用技术知识点:微处理器结构
  5. python list排序_python里对list中的整数求平均并排序
  6. jaVa工程师朱璇_使用QTP对Silverlight应用进行自动化测试的研究与实践
  7. led大屏按实际尺寸设计画面_Micro LED电视:模块化的设计思路,能实现16K巨幕
  8. 关于SAP Spartacus的Action - LoadCmsPageData
  9. 前端学习(2440):axios处理文章数据
  10. python测试电脑性能的代码_python编程测试电脑开启最大线程数实例代码
  11. 用诗歌描写计算机课,小班诗歌公开课教案范文【3篇】
  12. java 执行代码超时,如何在Java中使用超时调用一些阻塞方法?
  13. PowerDesigner--创建概念数据模型;并生成逻辑数据模型/物理数据模型/数据库SQL脚本
  14. mac java jni_Mac OS上编译JNI的动态库
  15. 【详细图解】七彩虹智能主板的开机键连接线怎么插 | 七彩虹主板的前置音频接线法怎么插 | 七彩虹2.0主板 F_PANEL怎样插
  16. 7个实用的Python自动化代码,别再重复造轮子了
  17. Linux ln -sfn命令
  18. Centos7下的zabbix安装与部署
  19. 大数据工程师需要学习哪些?
  20. 推荐4款最好用的远程桌面访问软件,亲测好评

热门文章

  1. 华为防火墙双机热备技术:HRP、VGMP、VRRP,三大技术值得一学!
  2. 计算机体系结构基础最近的知识点
  3. python朋友圈广告怎么这么火_为什么到处都能看到 教学Python 广告,真的那么好吗?...
  4. 蓝海讯通OneAPM产品简介
  5. 零基础学SQL(十、子查询与多表关联)
  6. asp毕业设计——基于vb+VB.NET+SQL Server的网上图书预约系统设计与实现(毕业论文+程序源码)——图书预约系统
  7. Steinberg VST Live Pro Mac 音乐人现场演出工具
  8. C# 在PPT中添加数学公式
  9. 别再花冤枉钱,微信小程序免300元认证费用详细教程,助力企业/个体低成本发展
  10. 如何合并Google表格中的单元格