请教大佬们一个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;

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

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;