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.