2016-11-12 28 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