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

MySQL中如何统计同一张表内被引用项的数量?

MySQL中如何统计同一张表内被引用项的数量?

嗨,完全懂这种熬到脑子转不动的感觉!别慌,这个同表自关联统计的问题其实没那么复杂,咱们一步步来搞定它~

首先回顾下你的需求:你有一个persons表,里面的father_id关联了同表中父亲的id,想要统计每个父亲的孩子数量,包括像Eric那种没有孩子的情况(显示0)。

核心思路

其实关键就是把同一张表当成两个独立的表来用:一个作为「父亲表」,一个作为「孩子表」,通过自连接建立两者的关联关系,再分组统计每个父亲对应的孩子总数。

实现代码

直接用这个查询语句就能得到你想要的结果:

SELECT 
    p.id,
    p.name,
    COUNT(c.id) AS child_count
FROM 
    persons p
LEFT JOIN 
    persons c ON p.id = c.father_id
WHERE 
    p.isfather = 1
GROUP BY 
    p.id, p.name
ORDER BY 
    p.id;

代码解释

  • 自连接部分:LEFT JOIN persons c ON p.id = c.father_id
    这里给原表起了两个别名p(代表父亲)和c(代表孩子),关联条件是父亲的id等于孩子的father_id。用LEFT JOIN是关键——它能保证即使某个父亲没有任何孩子,也会出现在结果里,此时对应的孩子数会显示为0。
  • 筛选父亲:WHERE p.isfather = 1
    这一步是筛选出所有标记为父亲的记录,完全匹配你给出的示例需求(John、Mike、Eric)。
  • 统计数量:COUNT(c.id)
    统计每个父亲对应的孩子数量,因为如果没有孩子,c.id会是NULL,而COUNT函数会自动忽略NULL值,所以结果自然就是0,正好符合Eric的情况。
  • 分组排序:GROUP BY p.id, p.name + ORDER BY p.id
    按父亲的id和姓名分组,确保每个父亲只出现一次,最后按id排序让结果更清晰。

测试结果

用你提供的测试数据运行这个查询,会得到如下结果:

idnamechild_count
1John3
2Mike2
8Eric0

完全符合你想要的John有3个孩子、Mike有2个、Eric有0个的需求~

备注:内容来源于stack exchange,提问作者Gowire

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 15:58:16