En el ciclo que pones,
sisne, realmente no estás recorriendo los registros (fíjate que el contador del ciclo, i, no interviene para nada) y siempre tomas el mismo valor. Como lo hace
eficsa es correcto.
Por otra parte, creo más conveniente usar una consulta SQL especial para el conteo:
Código SQL
[-]
select calificacion, count(calificacion)
from materias
group by calificacion
De esta manera, no tienes que hacer un ciclo pues la consulta te trae todos los resultados de una sentada.
// Saludos