在一个查询中获取同一表中每个用户的引荐计数

时间:2018-07-31 00:55:30

标签: mysql sql mariadb

我有下表:

| Id | referral |    
|----|----------|    
|  1 |        0 |    
|  2 |        0 |    
|  3 |        1 |    
|  4 |        2 |    
|  5 |        1 |

当用户的引荐来源栏中为0时,表示他没有点击任何引荐链接。如果有数字,则表示另一个用户的ID。

所以现在我只想要这种输出:

| Id | referral | referred_count |    
|----|----------|----------------|
|  1 |        0 |              2 |  
|  2 |        0 |              1 |    
|  3 |        1 |              0 |    
|  4 |        2 |              0 |    
|  5 |        1 |              0 |

有没有办法仅通过一个mysql查询获得这种输出?我尝试了很多事情,但被卡住了。

2 个答案:

答案 0 :(得分:1)

一种简单的方法使用相关子查询:

select t.*,
       (select count(*) from t t2 where t2.referral = t.id) as referred_count
from t;

答案 1 :(得分:0)

您也可以使用表的JOIN来做到这一点:

select r1.id, r1.referral, count(r2.referral) AS referred_count
from ref r1
left join ref r2 on r2.referral = r1.id
group by r1.id

输出:

id    referral    referred_count
1     0           2 
2     0           1 
3     1           0 
4     2           0 
5     1           0