Mysql
 sql >> Database >  >> RDS >> Mysql

Filtra gli studenti che non hanno ancora superato una materia

Suggerirei di utilizzare l'aggregazione:

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

Il HAVING La clausola conta il numero di risultati per ogni studente e corso in cui l'ultima colonna è 'Pass' . In MySQL, i booleani sono trattati come numeri interi in un contesto numerico, dove true è 1. Quindi, sum( Superato/Non superato= 'Pass') conta il numero di volte che uno studente ha superato il corso. Il = 0 dice che lo studente non ha mai superato il corso.

Come suggerimento, non inserire caratteri speciali come / e . nei nomi delle colonne. Ciò richiede l'escape delle colonne e rende il codice più difficile da scrivere perché è pieno di backtick.