2009-10-02 8 views
0

J'essaie d'afficher un tableau montrant une liste de cours. Je voudrais inclure une colonne indiquant le nombre de personnes ayant suivi le cours et, si possible, le nombre de personnes qui n'ont pas encore terminé le cours.SQL JOIN + COUNT QUERY

Ma structure de table est comme ceci:

Courses 
courseid | title | etc 

Studying 
courseid | studentid | some other fields | has_completed 

Idéalement, la sortie doit être quelque chose comme ceci par exemple:

Course Title | some other fields | Students completed | Students not completed 
Something  etc     5     3 

Je vais avoir du mal à obtenir les deux champs distincts comptés. Quelqu'un peut-il recommander un bon moyen de le faire?

Tout conseil apprécié, merci.

Répondre

4

Quelque chose comme cela devrait faire:

SELECT c.CourseID, c.Title, SUM(s.Has_Completed) Completed, SUM(1-s.Has_Completed) NotCompleted 
FROM Courses c 
LEFT JOIN Studying s ON c.CourseID = s.CourseID 
GROUP BY c.CourseID, c.Title 
0

Essayez d'utiliser le SQL count command

SELECT COUNT(has_completed) FROM Studying WHERE has_completed='1' 
1

Si has_completed a une valeur 1 pour vrai et 0 pour faux, vous pouvez le résoudre très simple:

SELECT c.title, SUM(s.has_completed) as completed, COUNT(studentid) - SUM(s.has_completed) as notCompleted 
FROM Courses c, Studying s 
where c.courseid = s.courseid 
GROUP BY c.courseid, c.title 
+0

Les cours sans élèves seront exclus de votre recherche. – Lucero