如何统计每位客户的推荐人数?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;
针对你的数据验证
用你给出的测试数据运行第二个方案,会得到以下结果:
| 推荐人姓名 | 推荐人数 |
|---|---|
| Blake | 2 |
| Allan | 1 |
| Jen | 1 |
| Zeke | 0 |
完全符合你的需求:Blake推荐了Allan和Jen(共2人),Allan推荐了Zeke(1人),Jen推荐了Blake(1人),Zeke没有推荐任何人(0人)。
内容的提问来源于stack exchange,提问作者jayjayreddick
相关产品推荐
相关产品推荐

