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

以上是 请教大佬们一个SQL查询问题,如何在多表查询中使用groupby+orderby+limit多条件查询并且逻辑通顺? 的全部内容, 来源链接: utcz.com/a/38437.html

回到顶部