2013-04-13 80 views
0

我有一個html表格,我想顯示cht_name,count_hohcount_members。我可以得到count_hoh中的計數結果,因爲我在household_tbl上的cht_idtbl_cht_members上的主表有相同的字段。我在計算count_members的時候遇到了一些問題,這是tbl_household_members,它有household_tbl上的相同字段,但是沒有cht_id這個字段,我可以在count_hoh上直接得到相同的計數。我只通過household_connector_id連接他們。子查詢中的COUNT個

SELECT cht_id as cht, name, 
     (SELECT household_connector_id as hoh, 
       COUNT(*) 
      FROM household_tbl 
     WHERE cht_id = cht) as count_hoh, 
     (SELECT COUNT(*) 
      FROM tbl_household_members 
     WHERE household_connector_id = hoh) as count_members 
    FROM tbl_cht_members 
GROUP BY cht_id 
+1

你可以通過繪製一些圖表https://www.draw.io/或張貼相關表格模式來更好地解釋你的問題 – Ejaz

回答

0

嘗試這種胡亂猜測;)

SELECT 
    tbl_cht_members.cht_id as cht, tbl_cht_members.name, 
    COUNT(household_tbl.cht_id) AS count_hoh, 
    COUNT(tbl_household_members.household_connector_id) AS count_members 
FROM 
    tbl_cht_members LEFT JOIN household_tbl 
     ON tbl_cht_members.cht_id = household_tbl.cht_id 
    LEFT JOIN tbl_household_members 
     ON household_tbl.household_connector_id = tbl_household_members.household_connector_id 

你可能會解決一些領域/表名稱和/或使用DISTINCT但這個概念將工作IMO

0

由於家庭已經擁有了適當的關係,你可以通過關係(cht_id)加入並分組,並獲得你的計數。

但由於會員表具有第二級關係,並且您希望進行其他求和,您必須「預先聚合」它並通過相關表(household_tbl)公開關係。

 SELECT cht_id as cht, 
      name, 
      count(*) as households_cnt, 
      members.cnt as member_cnt 
     FROM tbl_cht_members cht 
    LEFT JOIN household_tbl households 
     ON households.cht_id = cht.cht_id 
    LEFT JOIN (SELECT ht.cht_id, count(*) as cnt 
       FROM tbl_household_members thm 
       JOIN household_tbl ht 
       ON thm.household_connector_id = ht.household_connector_id 
       GROUP BY thm.cht_id) members 
     ON members.cht_id = cht.cht_id 
    GROUP BY cht.cht_id, name, members.cnt 

另一個注意:它確實有助於組織表的命名。你有「tbl」作爲前期和後期修復 - 非常混亂。事實上,我可能會把它完全拋棄。