墨染-流觞 2022-01-11 22:17 采纳率: 100%
浏览 63
已结题

查询学生成绩表中700分一下总分最高的学生,怎么用嵌套查询查出

现有三张表:学生信息表,班级信息表,考试成绩表
三表字段如下:
学生信息表:stid ,bjid,stname,stsex,stage
班级信息表:bjid,bname
考试成绩表:chengjid,stid,kclx(课程类型),chengj(各科成绩)

问题:怎么查询总分700以下最高分数的学生和其所在的班级

,

  • 写回答

2条回答 默认 最新

  • DarkAthena ORACLE应用及数据库设计方案咨询师 2022-01-12 13:31
    关注

    楼上这个专家的sql错的地方太多了。
    最直白的写法,先用having限制数据范围,然后取max得到检索条件,再去查原表就行了

    select a.*, b.*
      from 学生信息表 a, 班级信息表 b
     where a.bjid = b.bjid
       and a.stid in
           (select stid
              from 考试成绩表
             group by stid
            having sum(chengji) = (select max(sum(chengji))
                                    from 考试成绩表
                                   group by stid
                                  having sum(chengji) < 700));
    

    但特么谁这么写我就跟谁急。
    如果使用开窗函数,可以让这个变得简单,由于不清楚你的oracle版本,我只能写个老版本能用的,如果是新版本会更简单,新版本里可以多重聚合

    select *
      from (select a.stid,
                   a.stname,
                   a.stsex,
                   a.stage,
                   b.bname,
                   rank() over(order by chengji desc) rk
              from (select stid, sum(chengji) chengji
                      from 考试成绩表
                     group by stid
                    having sum(chengji) < 700) c)
     where rk = 1;
    

    然后,在12c以上,甚至都不需要使用嵌套

    select a.stid,
           max(a.stname) stname,
           max(a.stsex) stsex,
           max(a.stage) stage,
           max(b.bname) bname,
           sum(c.chengji) cj
      from 学生信息表 a, 班级信息表 b, 考试成绩表 c
     where a.bjid = b.bjid
       and a.stid = c.stid
     group by a.stid
    having sum(c.chengji) < 700
     order by 6 desc
     fetch first 1 row only;
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 1月20日
  • 已采纳回答 1月12日
  • 创建了问题 1月11日

悬赏问题

  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料