Я думаю, это должно сработать для вас.
select sid,
listagg(gradecount, '; ') within group (order by gradecount) as grade
from (
select sid, grade || ',' || count(1) as gradecount
from enrollments
where grade is not null
group by sid, grade
) studentgradecount
group by sid;
Если это кажется запутанным, попробуйте выполнить внутренний запрос самостоятельно, чтобы увидеть, что он делает:
select sid, grade || ',' || count(1) as gradecount
from enrollments
where grade is not null
group by sid, grade