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

如何统计每位客户的推荐人数?SQL自连接实现咨询

解决客户推荐人数统计的自连接方案

嘿,你说得太对了——自连接正是解决这个问题的核心!你的原始SQL只是统计了每个客户自身的cust_referred_by字段数量,这其实是在数每个客户被推荐的记录数,而不是他们推荐了多少人。咱们来一步步拆解怎么用自连接实现正确统计:

核心思路

你的客户表同时存储了两种角色:

  • 推荐人:对应cust_id(每个客户都可能是推荐人)
  • 被推荐人:对应cust_referred_by字段指向的推荐人ID

我们需要把同一个表当成两个独立的表来关联:一个代表推荐人,一个代表被他们推荐的客户,然后统计每个推荐人对应的被推荐客户数量。

完整SQL实现

方案1:只统计有推荐记录的客户(INNER JOIN)

如果只需要显示确实推荐过别人的客户,可以用内连接:

SELECT 
    referrers.cust_name AS 推荐人姓名,
    COUNT(referees.cust_id) AS 推荐人数
FROM 
    Customer referrers
INNER JOIN 
    Customer referees ON referrers.cust_id = referees.cust_referred_by
GROUP BY 
    referrers.cust_id, referrers.cust_name
ORDER BY 
    推荐人数 DESC;

方案2:统计所有客户(含未推荐任何人的,LEFT JOIN)

如果要包含所有客户,哪怕他们没有推荐过任何人(结果中推荐人数显示0),用左连接更合适:

SELECT 
    c.cust_name AS 推荐人姓名,
    COUNT(r.cust_id) AS 推荐人数
FROM 
    Customer c
LEFT JOIN 
    Customer r ON c.cust_id = r.cust_referred_by
GROUP BY 
    c.cust_id, c.cust_name
ORDER BY 
    推荐人数 DESC;

针对你的数据验证

用你给出的测试数据运行第二个方案,会得到以下结果:

推荐人姓名推荐人数
Blake2
Allan1
Jen1
Zeke0

完全符合你的需求:Blake推荐了Allan和Jen(共2人),Allan推荐了Zeke(1人),Jen推荐了Blake(1人),Zeke没有推荐任何人(0人)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:33:15