有两张表如下
现在要求是写出SQL语句:按照班级class进行分组,然后查询出各个班级数学成绩前两名的学生的姓名name、班级class、数学成绩math
我写出的SQL语句如下:
最后一个条件limit 2不知道该怎么插入
才能显示,拜托各位大佬了,谢谢谢谢。
这样查询只有两条数据了
这就叫完美,想明白了
SELECT s.ID '学号',s.name '名字',s.class '班级',g.math '成绩'
FROM
stinfo s,grade g
WHERE
(SELECT COUNT(*)
FROM
stinfograde s1,grade g1
WHERE s1.class=s.class AND g1.math>=g.math
AND g1.ID=s1.ID)<=2
AND g.ID=s.ID
GROUP BY s.class,g.math
ORDER BY s.class,g.math DESC;
可以试试下面的sql
SELECT
s2.ID,
s2.name,
s2.class,
s2.math
FROM
(
SELECT
IF
( s1.class = @class, @rank := @rank + 1, @rank := 1 ) AS rank,
@class := class AS tmp_class,
s1.ID,
s1.name,
s1.class,
s1.math
FROM
( select stinfo.ID,name,class,math from stinfo,grade where stinfo.ID=grade.ID ORDER BY class, math DESC ) s1,
( SELECT @class := NULL, @rank := 1 ) tmp
) s2
WHERE
s2.rank <= 2
select name 姓名,class 班级,math 数学成绩 from stinfo,grade
where stinfo.ID=grade.ID group by class order by math desc;