LEFT JOIN关联家庭表与公民表,生成含成员总数及户主信息的指定输出结果求助
解决方案:使用LEFT JOIN实现家庭信息统计
要实现你需要的输出,我们可以通过LEFT JOIN关联households和citizens表,结合分组统计与条件聚合来获取目标字段。以下是完整的SQL语句:
SELECT h.Serial_no, h.Address, COUNT(c.Serial_id) AS Total_count, MAX(CASE WHEN c.Role = 'Head' THEN c.Fullname END) AS Head FROM households h LEFT JOIN citizens c ON h.Serial_no = c.household_id GROUP BY h.Serial_no, h.Address ORDER BY h.Serial_no;
代码细节解释:
- LEFT JOIN关联逻辑:以
households作为主表做左连接,确保哪怕没有对应家庭成员的家庭(比如sn3)也会被保留在结果集中,不会被过滤掉。 - 统计家庭成员总数:
COUNT(c.Serial_id)会自动忽略LEFT JOIN产生的null值,所以没有成员的家庭会返回0,有成员的家庭则统计对应人数。 - 提取户主姓名:用
MAX(CASE WHEN c.Role = 'Head' THEN c.Fullname END)做条件聚合——每个家庭只会有一个户主,MAX(或MIN)能精准提取出该家庭的户主名,无户主的家庭则返回null。 - 分组与排序:按
households的编号和地址分组,保证每个家庭在结果中只占一行;最后按编号排序让结果更规整。
执行这段SQL后,就能得到你预期的输出:
| Address | Total_count | Head |
|---|---|---|
| New York | 3 | John |
| Maryland | 1 | Mike |
| France | 0 | null |
内容的提问来源于stack exchange,提问作者Nelson
相关产品推荐
相关产品推荐

