Вы можете использовать это:
Предположим, как в ваших данных - Grade (75 or above is passing) => grade < 75 is failed
SELECT code
FROM exams
GROUP BY code
HAVING SUM(CASE WHEN grade < 75 THEN 1 ELSE 0 END) :: FLOAT / COUNT(grade) > 0.45;
Это Sqlfiddle