基于同表引用ID,查询推荐人数达3人的用户SQL实现
可以实现,对应的SQL查询语句如下
要筛选出推荐人数为3人的用户,我们需要先统计每个用户被多少人作为推荐人(即ref_id等于该用户id的记录数量),再筛选出数量恰好为3的用户。
方法一:使用子查询
SELECT name FROM user WHERE id IN ( SELECT ref_id FROM user GROUP BY ref_id HAVING COUNT(*) = 3 );
方法二:使用JOIN(性能更优,适合大数据量)
SELECT u.name FROM user u INNER JOIN ( SELECT ref_id, COUNT(*) AS recommend_count FROM user GROUP BY ref_id HAVING recommend_count = 3 ) AS stats ON u.id = stats.ref_id;
结果说明
根据你提供的原始数据,执行上述语句后会得到Sue(她的id=3,有3条记录的ref_id=3)。如果期望结果包含Sam,可能是以下两种情况之一:
- 原始数据存在笔误(例如
id=10的ref_id不是1),导致Sam的推荐人数实际为3; - 需求是筛选推荐人数≥3的用户,此时只需将
HAVING条件改为COUNT(*) >= 3,即可同时得到Sam(推荐人数4)和Sue(推荐人数3)。
内容的提问来源于stack exchange,提问作者Cheam Huoy San
相关产品推荐
相关产品推荐

