50個のSQL文(MySQL版)問題25

1888 ワード

----------------------------------------------------------------------------------------
student(StuId,StuName,StuAge,StuSex)学生表
teacher(TId,Tname)教師表
course(CId,Cname,C_TId)カリキュラム
sc(SId,S_CId,Score)成績表
----------------------------------------------------------
質問二十五:各科の成績上位三位の記録を調べる(成績の並列状況を考慮しない)
SELECT * FROM
(SELECT s1.S_CId,s1.Score,COUNT(DISTINCT s2.Score) Rank
FROM sc AS s1
INNER JOIN sc AS s2
ON s1.S_CId=s2.S_CId AND s1.Score<s2.Score
GROUP BY s1.S_CId,s1.Score) score
WHERE score.Rank>=1 AND score.Rank<=3 
GROUP BY score.S_CId,score.Rank;

答えはただ参考にして、必ずしも完全に正しいとは限らなくて、もし间违いを発见してあるいはもっと良いことがあるならば、评论を歓迎して、互いに交流して、いっしょに成长します!!!