Acho que o método mais simples é
PERCENTILE_CONT() ou 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;
Isso pressupõe (razoavelmente) que
score é numérico. A diferença entre
PERCENTILE_CONT() e PERCENTILE_DISC() é o que acontece quando há um número par de valores. Isso geralmente é uma consideração sem importância, a menos que você tenha uma pequena quantidade de dados.