2013-04-13 82 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”作为前期和后期修复 - 非常混乱。事实上,我可能会把它完全抛弃。