2017-04-02 73 views
1

我被要求爲學生的遲到和學校政策違規創建數據庫。現在MYSQL - 與COUNT連接多個表()

,我有三個獨立的表:

tbl_ClassList:

Student_ID Student_Name 
    1000   Lee, Jonder 
    1001   Chow, Stephen 
    1002   Kim, Martin 
    1003   Johns, Kevin 
    1004   Hearfield, Olivia 
    1005   Jarrs, Marlon 

tbl_Tardy:

Record_No Student_ID 
      1 1001 
      2 1001 
      3 1000 
      4 1003 
      5 1002 
      6 1003 
      7 1001 
      8 1001 
      9 1002 
     10 1004 

tbl_Violation:

Record_No Student_ID 
      1 1000 
      2 1000 
      3 1004 
      4 1005 
      5 1001 
      6 1002 
      7 1003 

我被要求做的是生成一個該列表包含了包含學生信息的列表,包括他/她的ID,姓名,遲到次數和違規次數。是這樣的:

Student_ID Student_Name  No. of Tardy No. of Violation 
     1000 Lee, Jonder   1    2 
     1001 Chow, Stephen  4    1 
     1002 Kim, Martin   2    1 
     1003 Johns, Kevin  2    1 
     1004 Hearfield, Olivia 1    1 
     1005 Jarrs, Marlon  0    1 

是否有任何類型的連接我可以用來實現輸出?請幫幫我。

+0

你可以有一個簡單的學生證 – Rams

回答

1

你可以在子查詢中找到單獨的聚合數據,並且可以在子查詢中找到它們,left join可以使用classlist表查找它們。如果沒有遲緩/違規行,使用​​3210以獲得零。

select c.*, 
    coalesce(t.count_tardy, 0) as no_of_tardy, 
    coalesce(v.count_violations, 0) as no_of_violations, 
from tbl_classlist c 
left join (
    select student_id, 
     count(*) as count_tardy 
    from tbl_tardy 
    group by student_id 
    ) t on c.student_id = t.student_id 
left join (
    select student_id, 
     count(*) as count_violations 
    from tbl_violation 
    group by student_id 
    ) v on c.student_id = v.student_id; 
+1

哇它的工作原理和加入羣。非常感謝。 :) –