Mysql的加入/ SUM查询

问题描述:

我有2个表:Mysql的加入/ SUM查询

  • 课程:谁已经签署了为一疗程

泰伊介绍如下学生:开放课程

  • student_courses列表:

    courses: 
    id 
    name 
    approved_by 
    
    student_courses: 
    id 
    student_id 
    course_id 
    paid 
    

    我想为每门课程列出所有课程,内容如下:课程编号和螺柱数量新生报名参加该课程。我试过这样的东西:

    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

    您没有“GROUP BY”子句,聚合“SUM()”需要。 – 2012-01-02 23:42:03

    +0

    在您的查询中,您正在使用未在模式描述中定义的表'学生'。您还将学生表加入'instructor_id'字段,这两个字段都没有定义,并且没有意义加入到学生中。你能澄清一下吗?因为这里似乎还有其他变数可能会让任何人试图帮助你。 – John 2012-01-02 23:47:16

    +0

    学生的名字和姓氏只是一个加入,但为了简单起见,我删除了他们! – execv 2012-01-02 23:49:14

    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

    谢谢!最后一个问题:我如何在我的WHERE中使用number_of_students(例如,我只想抓取未满的课程)。我试图改变我的地方是: WHERE courses.approved_by 0 AND number_of_students execv 2012-01-03 00:11:58

    +1

    见我的编辑。这些条件(涉及在GROUP BY期间计算的值应该放在HAVING条款中) – 2012-01-03 00:16:34