sql >> Databáze >  >> RDS >> Mysql

Filtrujte studenty, kteří ještě neprošli nějakým předmětem

Navrhoval bych použít agregaci:

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

HAVING klauzule počítá počet výsledků pro každého studenta a kurz, kde poslední sloupec je 'Pass' . V MySQL se s booleany zachází jako s celými čísly v číselném kontextu, přičemž true je 1. Takže sum( Pass/Fail= 'Pass') počítá, kolikrát student absolvoval kurz. = 0 říká, že student kurz nikdy neprošel.

Jako návrh nevkládejte speciální znaky jako / a . v názvech sloupců. To vyžaduje escapování ze sloupců a jen znesnadňuje zápis kódu, protože je plný zpětných zaškrtnutí.



  1. CHAR() Příklady v MySQL

  2. SQL Server:Připojte nesprávnou verzi 661

  3. Seskupte data ve smyčce foreach

  4. Jak najít chybějící řádky (data) v tabulce mysql?