Mysql
 sql >> Base de données >  >> RDS >> Mysql

Filtrer les étudiants qui n'ont pas encore réussi une matière

Je suggérerais d'utiliser l'agrégation :

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

Le HAVING la clause compte le nombre de résultats pour chaque étudiant et cours où la dernière colonne est 'Pass' . Dans MySQL, les booléens sont traités comme des entiers dans un contexte numérique, vrai étant 1. Ainsi, sum( Réussi/Échoué= 'Pass') compte le nombre de fois qu'un étudiant a réussi le cours. Le = 0 indique que l'étudiant n'a jamais réussi le cours.

En guise de suggestion, ne mettez pas de caractères spéciaux tels que / et . dans les noms de colonne. Cela nécessite d'échapper les colonnes et rend simplement le code plus difficile à écrire car il est rempli de backticks.