最近看见一道数据库的面试题,面试的是测试,感觉查询很复杂,特意建个表试了一下。一共三个表,班级、学生、成绩,如下:

题目是:查询每班分数最高的学生。

先看一下所有人分数总和,这个比较简单,只要联合查询就可以了(我直接用了别人写的一个语句,没有inner join这种关键字,也是能查出来的):

这题的思路如果是:根据班级分组,求出总分,再取出每班的最高分和姓名,那结果与预期就很诡异了。

里面的查询直接用了上面查总分的语句,外面又写一个取姓名和每个班的最高分的语句,仔细看最高分查出来了,但是和上面的查询结果对比一下就发现,姓名和分数没对上。不过再思考一下也就差不多了,这步只取出每个班的最高分,再与上面的查询结果再联合查询一次,下面就是我对这题写出的一个庞大的语句:

这大段特意加了缩进,好看一些。上面是查询所有学生的班级、姓名和总分,下面是查询出每个班最高分,两个临时表联合查询,查出我理解的题意。因为我用的是MySQL,这里还有一个坑,就是我圈出来的那a,aaa,b,这种子查询的表是需要别名的,如果是Oracle好像没有这个限制。

其实这题还有第二问:查询每班不及格科目数大于2的学生。大于2的恐怕没有,最多大于等于2,只有一个。

有人说我第二个语句错了,确实是错了,哈哈。下面放上正确的语句,加个分组,如果两个人满足条件,不加分组只会查出一个人,把小天的分数也改成两门不及格。

select t3.ClassName,StuName from student t1
    inner join score t2 on t1.StuId=t2.StuId
    inner join class t3 on t1.ClassId=t3.ClassId
    where Score<60 group by t2.StuId HAVING count(*)>=2;

感觉第二问并不是很难,虽然having count这种用的比较少(至少我测试时候没用过),第一问简直不能再绕,不知道出题人是不是真正知道正确答案;还是出题人只是理论上知道答案,如果只是理论上知道答案,恐怕只能查出最早的那个错的结果。对于这种面试失败的只能说命不好了。

查询每班分数最高的学生相关推荐

  1. oracle查询各个年级的总分数,1、查询各班各科分数最高的学生学号,姓名,班级名称,科目名称,分数:...

    3.分数表 score: ±---------±------±-------±------+ | courseID | stuID | course | score | ±---------±---- ...

  2. 1、查询各班各科分数最高的学生学号,姓名,班级名称,科目名称,分数:

    有三张表:class.student.score 看了很多的博客,结果与问题总是差!!也不给截图 我自己写了一个,但还不够精简,还望那位大神还修改!代码如下:在最后面 1.班级表 class: cla ...

  3. sql查询每科成绩的最高分_SQL查询语句: 查询 每科目分数最高的5项(学生姓名,科目,分数)...

    SQL查询语句: 查询 每科目分数最高的5项(学生姓名,科目,分数) 关注:251  答案:4  mip版 解决时间 2021-01-10 16:21 已解决 2021-01-09 22:40 SQL ...

  4. mysql求每个班级的最高分_sql查询每个班上成绩最高的学生信息

    sql查询每个班上成绩最高的学生信息 数据库表和数据准备: if exists (select * from sysobjects where id = OBJECT_ID('[classinfo]' ...

  5. 查询分数最高的学生姓名和课程名

    查询分数最高的学生姓名和课程名 SQL语句: select student_name name,course_name course from student,course,score where s ...

  6. 数据库嵌套循环查询联系——1.查询选修了课程号为“3”的学生姓名和系别、4.查询其它系中‘2‘号课程比信息系所有学生分数高的学生学号和姓名、6.查询每门课程中低于该课程平均成绩的学生学号和姓名

    1.查询选修了课程号为"3"的学生姓名和系别 Select sname,sdept from student where sno in ( select sno from sc w ...

  7. 查询每门课分数最高的学生

    三个表: score:course: stu: 查询 每科成绩最高的学生: select * from (select st.sname,sc.grade,c.cname from score sc ...

  8. mysql查询95031班人数_MySQL的查询练习 - osc_1ngzqx2h的个人空间 - OSCHINA - 中文开源技术交流社区...

    student表 teacher表 course表 score表 对这四个表进行一些练习. 1:查询student表中所有记录. select *from student; 2:查询student表中 ...

  9. 【sql随笔】sql题目:查询每班成绩前三名

    实验题目:查询每班成绩前三名的信息 实验数据库:Oracle 实验数据:学生-成绩表(id,学生名,班级名,分数) 建表语句: 15笔数据,俩个班. create table OnePiece_SC ...

最新文章

  1. Flutter学习指南:文件、存储和网络
  2. golang select channel 多路复用
  3. springmvc国际化
  4. JDBC批量操作批量增加批量修改
  5. 字典类型处理函数及方法实例解析
  6. Docker 网络基础原理
  7. PhpStorm 对 AngularJS 的支持
  8. android异步更新UI
  9. STM32F103ZET6 蜂鸣器、按键
  10. Spring Boot和Spring数据JPA集成
  11. codeforces 297 E. Anya and Cubes
  12. 吴恩达机器学习 —— 2.7 计算图
  13. 华为拍月亮申请专利;魅族黄章回应李楠离职;GoLand 2019.2 Beta 发布 | 极客头条...
  14. 5. linux操作系统bios启动过程需要执行哪几个操作?,Linux系统启动的大致过程
  15. 范型编程系列二(非原创)
  16. win10微信卡顿_WIN10下微信崩溃(已经是最新版)的解决方法
  17. 购票系统c语言座位分配,铁路购票系统的简单座位分配算法
  18. python带你过不一样的“清明节”和看神奇的《清明上河图》
  19. 工作缺点和不足及措施_工作总结中的不足与改进该怎么写?
  20. mapgis考试111

热门文章

  1. 【浏览器】1022- 47 张图带你走进浏览器的世界!
  2. SWUST OJ 971: 统计利用先序遍历创建的二叉树的深度
  3. 超详细|算法岗学习路线大总结
  4. 环信IM集成问题整理——常见集成问题
  5. Python·os.path.abspath和os.path.realpath区别
  6. Linux 压缩、解压工具
  7. Python网络爬虫基础
  8. 调焦距离S远近与景深之关系
  9. 2.格式化输出与输入
  10. mysql数据库取奇数行数据_查询数据库中的奇数行和偶数行