sql >> Base de Datos >  >> RDS >> Mysql

Filtrar alumnos que aún no han aprobado una materia

Sugeriría usar la agregación:

SELECT `Reg.No`, SubjectCode, SUM(`Pass/Fail` = 'Pass')
FROM results
GROUP  BY `Reg.No`, SubjectCode
HAVING SUM(`Pass/Fail` = 'Pass') = 0;

El HAVING La cláusula cuenta el número de resultados para cada estudiante y curso donde la última columna es 'Pass' . En MySQL, los valores booleanos se tratan como enteros en un contexto numérico, siendo verdadero 1. Entonces, sum( Pasa/Falla= 'Pass') cuenta el número de veces que un estudiante aprobó el curso. El = 0 dice que el estudiante nunca aprobó el curso.

Como sugerencia, no ponga caracteres especiales como / y . en los nombres de las columnas. Eso requiere escapar de las columnas y solo hace que el código sea más difícil de escribir porque está lleno de acentos graves.