Jag tror att den enklaste metoden är PERCENTILE_CONT() eller PERCENTILE_DISC() :
SELECT MIN(score) as min_score,
PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY score) as median_score,
MAX(score) max_score
FROM result r JOIN
student s
ON s.id = r.student_id;
Detta förutsätter (rimligen) att score är numerisk.
Skillnaden mellan PERCENTILE_CONT() och PERCENTILE_DISC() är vad som händer när det finns ett jämnt antal värden. Det är vanligtvis ett oviktigt övervägande, om du inte har en liten mängd data.