2012-01-02 31 views
0

を登録しようMySQLは、私は2つのテーブルを持っている/ SUMクエリ

courses: 
id 
name 
approved_by 

student_courses: 
id 
student_id 
course_id 
paid 

コースごとに次のようなすべてのコースをリストしたい:コースIDとスタッド数そのコースにサインアップしました。私は次のようなものを試しました:

SELECT courses.id, SUM(student_courses.id) 
FROM courses as courses 
LEFT JOIN student_courses as student_courses on student_courses.course_id=courses.id 
WHERE courses.approved_by != '0' 

しかし、それは1行だけを返しています。

+1

あなたは 'SUM()'に必要な 'GROUP BY'節がありません。 –

+0

クエリでは、スキーマの説明で定義していないテーブル「students」を使用しています。また、studentsテーブルに 'instructor_id'フィールドに参加しています。これは定義されておらず、学生に参加する意味がありません。あなたを助けようとしている誰かを捨てるかもしれない他の変数があるように、これを明確にしてください。 – John

+0

生徒のファーストネームとファーストネームはただの参加でしたが、簡単にするために削除しました! – execv

答えて

3
SELECT courses.id 
    , courses.name 
    , COUNT(student_courses.id) AS number_of_students ---COUNT(), not SUM() 
FROM courses 
    LEFT JOIN student_courses 
    ON student_courses.course_id = courses.id 
WHERE courses.approved_by <> '0' 
GROUP BY courses.id 

HAVING COUNT(student_courses.id) < courses.student_slots 
+0

ありがとう!最後の1つの質問:私のWHEREの中でnumber_of_studentsを使用するにはどうすればいいですか?(たとえば、フルではないコースを取得したいだけです)。私はどこであることを修正してみました: "不明な列 'number_of_students' 'where句' で" – execv

+1

私の編集を参照してください。courses.approved_by <> '0' AND number_of_students

関連する問題