Vous avez plusieurs façons de le faire, mais en essayant de ne pas créer de tables temporaires, vous pouvez faire quelque chose comme ça :
select
s.id,
avg(case when sb.id = '01' then s.score end) as math,
avg(case when sb.id = '02' then s.score end) as bio
from student s
join subject sb on (sb.id = s.subject_id)
group by s.id
Remplissez simplement les lignes somme/cas pour les autres sujets selon vos besoins !
J'espère que ça aide.