2009-10-02 7 views
0

Я пытаюсь отобразить таблицу, показывающую список курсов. Я хотел бы включить столбец, который показывает число людей, закончивших курс и, если это возможно, а также число тех, кто еще, чтобы закончить его.SQL JOIN + COUNT QUERY

Моя структура таблицы следующим образом:

Courses 
courseid | title | etc 

Studying 
courseid | studentid | some other fields | has_completed 

В идеале на выходе должно быть что-то вроде этого, например:

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

У меня трудности с получением двух отдельных полей подсчитываются. Может ли кто-нибудь рекомендовать хороший способ сделать это?

Любые советы оценили, спасибо.

ответ

4

Что-то вроде этого нужно сделать:

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 
1

Если has_completed имеет значение 1 для истинного и 0 для лжи, вы можете решить это очень просто:

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

Курсы без студентов будут исключены в вашем запросе. – Lucero