单个查询中具有表的多个联接的多个计数-SQL

我必须将下面显示的三个表合并为一个表。

表:主题

Subject_id   Subject_Name
 1             English
 2             Arabic
 3             Hindi

表:学生

Student_id     Student_Name    Subject_id
XXX               Veena            1
YYY                Ram             1
AAA                Raiza           2
DDD                David           3 
BBB                Geeth           3  

表:StudentVsSubject

Subject_id   Student_id      Status (1=passed,0=failed)
  1             XXX             1
  2             YYY             0
  3             BBB             1
  3             DDD             0  

输出应为:

Subject TotalStudents  Passed   Failed  NotAttended
English    2            1          0          1
Arabic     1            0          1          0
Hindi      2            1          1          0

我坚持只获得TotalStudents。

SELECT  Subjects.Subject_name,count(Students.Students) AS TotalStudents 
  from Subjects 
  LEFT JOIN  Students  on Subjects.Subject_id=Students.Subject_id 
  GROUP BY  Subjects.Subject_name
评论
  • ﹏執念
    ﹏執念 回复

    您可以使用聚合子查询来实现此目的:

    SELECT  sub.Subject_name,
            a.TotalStudents,
            a.Passed,
            a.Failed
      FROM  Subjects sub
        LEFT JOIN   (
                    SELECT  Subject_id,
                            COUNT(Student_id) AS TotalStudents,
                            SUM(Status) AS Passed,
                            SUM(IIF(Status = 0, 1, 0)) AS Failed
                      FROM  StudentVsSubject
                      GROUP BY Subject_id
                    ) a ON a.Subject_id = sub.Subject_id
    

    输出(基于您上面的数据集):

    Subject_name  TotalStudents  Passed  Failed
    English       1              1       0
    Arabic        1              0       1
    Hindi         2              1       1