Как насчет использования предложения HAVING, чтобы получить людей с ошибочными предметами.
Тогда получите первую 1 с наибольшим количеством ошибок из этого.
SELECT
a.name,
COUNT(fails.subject) AS total_failed_subjects
FROM
(
SELECT i_alumn, subject
FROM alumnos_materias
GROUP BY i_alumn, subject
HAVING MAX(grade) <= 6
) fails
JOIN alumnos a ON a.i_alumn = fails.i_alumn
GROUP BY a.i_alumn, a.name
ORDER BY COUNT(fails.subject) DESC
FETCH FIRST 1 ROWS ONLY;
Тест на db <> fiddle здесь
Но если вам действительно нужна последняя попытка?
Тогда вы можете использовать ROW_NUMBER, чтобы отфильтровать это перед подсчетом неудач.
SELECT
a.name,
COUNT(fails.subject) AS total_failed_subjects
FROM
(
SELECT i_alumn, subject, grade, attempt,
ROW_NUMBER() OVER (PARTITION BY i_alumn, subject ORDER BY attempt DESC) AS rn
FROM alumnos_materias
) fails
JOIN alumnos a ON a.i_alumn = fails.i_alumn
WHERE rn = 1 AND grade <= 6
GROUP BY a.i_alumn, a.name
ORDER BY COUNT(fails.subject) DESC
FETCH FIRST 1 ROWS ONLY;