最大列から行を取得する際に問題があります。
基本的には、学年ID(gid)とともに学生の最高学年を取得したいと考えています。しかし、2 を返す max grade id を使用しているため、クエリは正しくありません。
最初に受講したコースで、学生は D (1 点) を取得しました。2 回目の受講で E(0 点)を得た。
その 1 ポイントのグレード ID は 1 です。
クエリの結果は、1 (userid)、1 (subjectid)、1 (gradeid)、1 (score) になると思います。
ありがとう
更新 01:
より改善された例: http://sqlfiddle.com/#!3/97997/2