2016-11-12 27 views
0

我有3张表想加入。 学生,迟到旷工如何在3张桌子上正确使用COUNT?

学生包含每个学生所需的信息。

迟到 and 旷工。他们的结构几乎相同。两者都包含像student_id,日期等相同的列...

我的目标是计算旷工和迟到的数目,并把它放在与student_id相同的学生同一行。

Ex。 学生表:

student_id name 
a1   Josh 
a2   Pete 
a3   Gabe 
a4   Howard 

迟到表:

student_id date 
a2   January 1,2016 
a4   January 23,2016 

旷工表:

student_id date 
a1   Feb. 2,2009 
a2   August 3,2011 
a2   August 4,2011 
a4   March 18,2016 
a4   June 28,2016 
a4   June 29,2016 
a4   July 15,2016 
a4   July 16,2016 
a4   July 29,2016 

我已经尝试了一些。但这是迄今为止我发现的最接近的一个。

SELECT students.student_id, 
    COUNT(absenteeism.student_id) AS absents, 
    COUNT(tardiness.student_id) AS tardi 
FROM students 
    LEFT JOIN absenteeism ON students.student_id = absenteeism.student_id 
    LEFT JOIN tardiness ON students.student_id = tardiness.student_id 
GROUP BY students.student_id 

,结果是

student_id absents tardi 
a1   1  0 
a2   2  2 
a3   0  0 
a4   6  6 

我只得到了缺席权数。问题是a2和a4始终具有相同数量的缺席和迟到。

正确的结果应该是这样的...

student_id absents tardi 
    a1   1  0 
    a2   2  1 
    a3   0  0 
    a4   6  1 

回答

0

我终于与这个主题MYSQL Left Join COUNTS from multiple tables

我加在计数明显的帮助了它,并使用每个表的主键而不是student_id。

SELECT students.student_id, 
COUNT(distinct absenteeism.absent_id) AS absents, 
COUNT(distinct tardiness.tardi_id) AS tardi 
FROM students 
LEFT JOIN absenteeism ON absenteeism.student_id = students.student_id 
LEFT JOIN tardiness ON tardiness.student_id = students.student_id 
GROUP BY students.student_id 

我的错误是使用相同的列在缺席和迟到student_id数据。这就是为什么使用

COUNT(distinct absenteeism.student_id) 
COUNT(distinct tardiness.student_id) 

只会导致对

student_id absents tardi 
a1   1  0 
a2   1  1 
a3   0  0 
a4   1  1