You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在中间父表上使用GROUP BY关联多层父表?

多层关联表的公民统计查询解决方案

看起来你已经搭好了查询的框架,只差把表关联和聚合统计的部分补全了。这里给你一份完整的SQL语句,刚好能输出你想要的结果结构:

SELECT 
    country.name AS country_name,
    state.name AS state_name,
    city.name AS city_name,
    COUNT(citizen.id) AS citizens
FROM country
INNER JOIN state ON country.id = state.country_id
INNER JOIN city ON state.id = city.state_id
INNER JOIN citizen ON city.id = citizen.city_id
GROUP BY country.name, state.name, city.name;

关键细节说明:

  • 表关联逻辑:我们用INNER JOIN依次把四张表通过各自的外键关联起来——国家和州通过country.id = state.country_id,州和城市通过state.id = city.state_id,城市和公民通过city.id = citizen.city_id。如果你的场景需要包含没有公民的城市(统计数显示为0),可以把最后一个INNER JOIN改成LEFT JOIN。
  • 聚合统计:COUNT(citizen.id)用来精准统计每个城市的公民数量,选择citizen.id而非*是为了避免在使用LEFT JOIN时把NULL值也算入统计。
  • 分组规则:GROUP BY子句是必须的,因为我们使用了聚合函数COUNT,需要按国家、州、城市的名称分组,才能得到每个城市对应的独立统计结果。如果存在不同实体名称重复的情况(比如两个不同国家有同名的州),建议把ID也加入分组条件,确保统计的准确性:
    GROUP BY country.id, state.id, city.id, country.name, state.name, city.name;
    

内容的提问来源于stack exchange,提问作者Satyajeet Kanetkar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 11:07:29