【问题标题】:SQL Count in LEFT Joint Aggregate?左联合聚合中的 SQL 计数?
【发布时间】:2017-04-23 10:21:09
【问题描述】:

我有四张桌子,如下图

我想计算有多少学生具有 status 'v',其中 table 提交 的提交类型为 '1' 并按 student_id 分组> 所以最后我可以得到这样的表

我试过这样的sql查询

select p.id, (SELECT count(*) FROM  (select b.id from student as a , submission  as b WHERE a.id = b.student_id and b.id_submission_type =1  and a.status_n='v' and a.id_academic_programe = p.id GROUP BY b.student_id) )  from academic_programe as p

但是给我错误

1054 - “where 子句”中的未知列“p.id”

有什么建议吗?对不起我的英语

【问题讨论】:

    标签: mysql sql database


    【解决方案1】:

    关联不能在嵌套子查询中。幸运的是,这很容易解决:

    select p.id,
           (select count(*)
            from student st join
                 submission su 
                 on st.id = su.student_id and
                    su.id_submission_type = 1 and
                    st.status_n = 'v' and
            where st.id_academic_programe = p.id
           )
    from academic_programe p;
    

    【讨论】:

    • 感谢您的回复,该代码有效,但我只想计算一个 student_id,尽管他们提交了多个提交。在我的表格提交中,学生可以多次提交相同类型的提交。知道我该怎么做吗?我想用 student_id 分组。
    • @eniac05 。 . .在子查询中使用count(distinct su.student_id),而不是count(*)
    【解决方案2】:

    试试这个:

    select c.academic_program_name,count(a.distinct student_name) as count
    from
    (select * from student where status = 'v') a
    inner join
    (select * from submission id_submission_type=1) b
    on a.id  =b.student_id
    inner join
    academic_program_name c
    on a.id_academic_programe = c.id
    group by c.academic_program_name;  
    

    如有任何疑问,请告诉我。

    【讨论】:

      【解决方案3】:

      请尝试以下...

      SELECT student.id,
             student_name,
             academic_program_name AS Programe,
             COUNT( status_n ) AS status_n_count
      FROM student
      JOIN Submission ON student.id = Submission.student_id
      RIGHT JOIN academic_program ON student.id_academic_programe = academic_program.id
      WHERE id_submission_type = 1
        AND status_n = 'v'
      GROUP BY student.id,
               student_name,
               academic_program_name;
      

      该语句首先连接studentSubmission,从而得到一个包含studentidstudent_namestatus_nid_submission_type字段的表。然后RIGHT JOINed 形成一个表格,其中列出了每个学术课程以及每个学生的详细信息,并且仍然列出了没有学生的课程。

      使用WHERE 子句、GROUPed 和SELECTed 对生成的数据集进行细化

      如果您有任何问题或问题,请随时发表评论。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-11-17
        • 2017-04-19
        • 2016-12-13
        • 2020-11-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-16
        相关资源
        最近更新 更多