单表我是会查询的,由于需要和学生表链表查询,我就不会了,学生表和成绩变中学生ID是一致的,只有学生表中有学生名字,成绩表中有各科成绩,以学生ID关联,所以如果我要查“张三”的总成绩并得出他在全年级的排名,要怎么查?请教前辈们
单表我是会查询的,由于需要和学生表链表查询,我就不会了,学生表和成绩变中学生ID是一致的,只有学生表中有学生名字,成绩表中有各科成绩,以学生ID关联,所以如果我要查“张三”的总成绩并得出他在全年级的排名,要怎么查?请教前辈们
SELECT b.rank,c.score FROM (
SELECT count(*)+1 as 'rank' FROM (
SELECT id,u.score FROM 学生表 i LEFT JOIN (
SELECT id,SUM(score)as score FROM 成绩表 GROUP BY id
)u ON u.id=i.id ORDER BY u.score DESC
) a WHERE a.score>(SELECT sum(score) FROM 成绩表 WHERE id=1)
) b
LEFT JOIN (
SELECT sum(score)as score FROM 成绩表 WHERE id=1
) c on 1=1
应该是可以一步到位的,试一试
1 回答4.2k 阅读✓ 已解决
3 回答1.9k 阅读✓ 已解决
2 回答2.3k 阅读✓ 已解决
1 回答2.4k 阅读✓ 已解决
1 回答2.4k 阅读✓ 已解决
2 回答836 阅读✓ 已解决
1 回答1.4k 阅读✓ 已解决
zhangshanScore = select sum(score) from 成绩 g inner join 学生 s g.student_id = s.id where s.id = 学生id;
select count(*) + 1 as 排名 from (select sum(score) from 成绩 group by student_id having sum(score) > zhangshanScore) as a;
排名是查询表内分数比他多的人数+1