糖醋咸鱼多放辣 2020-08-12 11:49 采纳率: 72.7%
浏览 257
已采纳

请教大佬们一个SQL查询问题,如何在多表查询中使用groupby+orderby+limit多条件查询并且逻辑通顺?

图片说明
有两张表,学生信息表stinfo,包含字段ID、name、class,学生成绩表grade含有字段ID、math。
现在要求:
按照班级进行分组查询出每个班级数学分数前两名学生的所有信息(ID、姓名、班级、数学成绩)

我写的SQL查询的结果逻辑有问题:select name,math,class from stinfo,grade where stinfo.ID=grade.ID group by class,grade.ID order by math desc;

查询结果如下:图片说明谢谢大佬!

  • 写回答

1条回答 默认 最新

  • jingluan666 2020-08-12 14:41
    关注
    SELECT  `name`, math,class
    FROM
    (
      SELECT class,id, `name`, math,
        @rank := IF( @current_class= class, @rank + 1, 1 ) AS rank,
        @current_class := class 
      FROM
      (
         SELECT class,stuinfo.id,stuinfo.`name`,math
         FROM stuinfo
         JOIN grade ON stuinfo.id=grade.id
         ORDER BY
         class,
         math DESC 
      ) temp   
    ) ranked 
    WHERE
    rank <= 2;
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料